webForumDet fria alternativet

Top 5 forts

17 svar · 748 visningar · startad av MizzK

MizzKMedlem sedan juni 2003410 inlägg
#1

För några dagar sedan fick jag hjälp med en top 5 sats som skulle räkna ut top 5 och den fungerade trodde jag, men nu ser jag att den räknar ut top 5 på vissa ställen och top 6 på vissa, någon som har förslag hur detta ska fixas för att de ska bli korrekt?

Sql satsen:

SELECT u.hundnr, h.hundnamn, h.kon, Sum(u.poang) AS top5, (select sum(utr.poang)
from utst_resultat utr where utr.hundnr = u.hundnr) AS total, (select Count(aus.utstnr)
 from utst_resultat aus where aus.hundnr = u.hundnr) AS antal
 FROM utst_resultat AS u INNER JOIN hund AS h ON u.hundnr = h.hundnr
 WHERE (((u.poang) In (select top 5 ur.poang
 from utst_resultat ur where(ur.hundnr = u.hundnr)
 order by ur.poang desc))) GROUP BY u.hundnr, h.hundnamn, h.kon
 HAVING(((h.kon) = 't')) ORDER BY Sum(u.poang) DESC;

gamla tråden:

http://www.webforum.nu/showthread.php?t=151243

emissionMedlem sedan dec. 19996 721 inlägg
#2

Det ska inte vara

u.poang) In (select top 5 ur.poang

utan

u.utstnr) In (select top 5 ur.utstnr

Förutsatt att det är "utstnr" som identifierar den specifika utställningen

MizzKMedlem sedan juni 2003410 inlägg
#3

De gav samma resultat.. ingen skillnad i listan

om de var såhär du menade

SELECT u.hundnr, h.hundnamn, h.kon, Sum(u.poang) AS top5, (select sum(utr.poang)
from utst_resultat utr where utr.hundnr = u.hundnr) AS total, (select Count(aus.utstnr)
 from utst_resultat aus where aus.hundnr = u.hundnr) AS antal
 FROM utst_resultat AS u INNER JOIN hund AS h ON u.hundnr = h.hundnr
 WHERE (((u.utstnr) In (select top 5 ur.utstnr
 from utst_resultat ur where(ur.hundnr = u.hundnr)
 order by ur.poang desc))) GROUP BY u.hundnr, h.hundnamn, h.kon
 HAVING(((h.kon) = 'h')) ORDER BY Sum(u.poang) DESC;
MizzKMedlem sedan juni 2003410 inlägg
#4

kan de ha ngt med att vissa resultat kan vara identiska och i de fallen ska den endast välja en av dem? Eller så många av dem som behövs.. dvs den ska alltid välja de 5 högsta värdena!

emissionMedlem sedan dec. 19996 721 inlägg
#5

Det var just det som min förändring skulle åstadkomma. I den ursprungliga SQL-satsen räknades t.ex. 10,10,10,6,5,3,2 som de fem högsta.

Renskriven

SELECT  u.hundnr, 
        h.hundnamn, 
        h.kon, 
        Sum(u.poang)  AS top5, (SELECT sum(utr.poang) FROM utst_resultat utr WHERE utr.hundnr = u.hundnr) AS total, (SELECT Count(aus.utstnr) FROM utst_resultat aus WHERE aus.hundnr = u.hundnr) AS antal 
FROM    utst_resultat AS u 
INNER JOIN hund       AS h 
ON      u.hundnr = h.hundnr 
WHERE   u.utstnr In 
        (SELECT top 5 ur.utstnr 
        FROM    utst_resultat ur 
        WHERE   ur.hundnr = u.hundnr 
        ORDER BY ur.poang desc
        ) 
    AND h.kon='t' 
GROUP BY u.hundnr, 
        h.hundnamn, 
        h.kon 
ORDER BY Sum(u.poang) DESC
MizzKMedlem sedan juni 2003410 inlägg
#6

får med din kod samma resultat som innan, ingen skillnad =(

MizzKMedlem sedan juni 2003410 inlägg
#7

både utställning 3 och 6 ex kan mna få samma poäng på..

när jag bara väljer top 5 satsen skriver den ut ex så här

här finns totalt bara 6 resultat
utstnr-poang
31-30p
3-26p
11-20p
9-20p
1-15p
8-15p

ett annat exempel med 10 resultat
8-52
17-43
18-20
11-20
31-15
30-15
27-15

emissionMedlem sedan dec. 19996 721 inlägg
#8

???

Menar du att du får ut 6 resp. 7 resultat när du kör top 5-satsen??

MS SQL, Access?

MizzKMedlem sedan juni 2003410 inlägg
#9

jepp verkar så, men i första fallet här fanns de totalt 6 resultat men skrev ut 6 samt i den andra fallet fanns total 10 resultat och skrev ut 7..

konstigt va ;)

acess databas!

emissionMedlem sedan dec. 19996 721 inlägg
#10

Det råkar inte vara så att du använder någon tokig datatyp, såsom Memo?

MizzKMedlem sedan juni 2003410 inlägg
#11

nope alla e numbers...

@ndersMedlem sedan juni 200032 969 inlägg
#12

kan de ha ngt med att vissa resultat kan vara identiska och i de fallen ska den endast välja en av dem? Eller så många av dem som behövs.. dvs den ska alltid välja de 5 högsta värdena!

Brukar lösas genom att (i den delfråga som innehåller TOP) lägga till ett sekundärt sorteringsfält, som alltid är unikt (exempelvis ett räknar-id.).

MizzKMedlem sedan juni 2003410 inlägg
#13

hur menar du? visa gärna me kod

@ndersMedlem sedan juni 200032 969 inlägg
#14
.....
SELECT top 5 ur.utstnr 
        FROM    utst_resultat ur 
        WHERE   ur.hundnr = u.hundnr 
        ORDER BY ur.poang desc[b], något_till_fält_från_utst_resultat_att_sortera_på_exempelvis_en_räknare[/b]
.....
emissionMedlem sedan dec. 19996 721 inlägg
#15

Det var som sjutton. Sickna fasoner av Access....

MizzKMedlem sedan juni 2003410 inlägg
#16

ja verkligen, men de fungerade nu.. =D

tack för hjälpen alla =D

@ndersMedlem sedan juni 200032 969 inlägg
#17

Ja, Access beter sig lite underligt ibland (TOP är en av dessa underligheter), och det är bara att lära sig. :)

(Jag noterar också att jag för en gångs skull kan något som inte emission kan! (y))

emissionMedlem sedan dec. 19996 721 inlägg
#18

@nders skrev:

(Jag noterar också att jag för en gångs skull kan något som inte emission kan! (y))

Inte konstigt att jag sov dåligt.... ;)

142 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)