webForumDet fria alternativet

Klurig SQL fråga?

16 svar · 722 visningar · startad av Sjodahl

SjodahlMedlem sedan maj 20033 218 inlägg
#1

Hej!

Vill hämta ut något enligt följande:

SELECT USERID, sum(ANTAL) FROM traning_resultat GROUP BY USERID ORDER BY ANTAL

Men blir inte helt rätt, får ut allt men får det inte sorterat efter ANTAL. (går väl att sortera vektorn i efterhand, men vill ha det redan i SQL frågan om det går)

tbl_resultat:
ID
USERID
DATUM
AKTIVITETSID
ANTAL

Det jag vill ha ut är alla ANTAL ihop summerade för varje USERID och få det i storlekts ordning ;)

@ndersMedlem sedan juni 200032 969 inlägg
#2

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

Vad gäller det för dbms? Access? Prova då order by 2 desc.

SjodahlMedlem sedan maj 20033 218 inlägg
#3

mysql

SjodahlMedlem sedan maj 20033 218 inlägg
#4

fungerar fin fint, vad gör order by "2" igentligen ? eller menas det bara det andra värdet?

@ndersMedlem sedan juni 200032 969 inlägg
#5

Det andra fältet / värdet / uttrycket i select-listan.

SjodahlMedlem sedan maj 20033 218 inlägg
#6

Den löste det problemet, men nu vill jag ha den ännu mer "avancerad" ;)

Kanske borde göra en ny tråd?

tbl_resultat:
ID
USERID
DATUM
AKTIVITETSID
ANTAL

Det jag vill ha ut är alla ANTAL ihop summerade för varje USERID och få det i storlekts ordning. Men vill även för varje rad där AKTIVITETSID=2 så skall man ta ANTALET*2

Kanske inte är så bra förklarat, gör en ny förklaring annars ;)

Går det att använda IF satser i SQL tro?

aasahMedlem sedan mars 20034 471 inlägg
#7

Sjodahl skrev:

Går det att använda IF satser i SQL tro?

Ja, men hur/om det funkar ihop med en GROUP BY har jag ingen koll på, tyvärr. Så antingen får du vänta på nästa svar eller söka på IF i detta forum.

Första biten blir i alla fall:

tbl_resultat:
ID
USERID
DATUM
AKTIVITETSID
ANTAL

//Om ANTAL = 2 ska vara med i summan
SELECT USERID, SUM(ANTAL) AS TotAntal FROM tbl_resultat 
GROUP BY USERID
ORDER BY TotAntal ASC

//Annars
SELECT USERID, SUM(ANTAL) AS TotAntal FROM tbl_resultat 
WHERE ANTAL <> 2
GROUP BY USERID
ORDER BY TotAntal ASC
SjodahlMedlem sedan maj 20033 218 inlägg
#8

Nja, hade tänkt baka in "AKTIVITETSID" med när det är lika med 2 så skall man ta ANTAL ggr 2 med ;)

Alltså där WHERE <> 2, skall typ vara IF istället hehe.
Hittar inget om if satsar i SQL.

Peter SMedlem sedan dec. 20025 483 inlägg
#9
SELECT USERID, SUM(ANTAL * if(aktivitetsid = 2,2,1)) AS TotAntal FROM tbl_resultat 
GROUP BY USERID
ORDER BY TotAntal ASC

?

SjodahlMedlem sedan maj 20033 218 inlägg
#10

Vad gör exakt denna raden?

SUM(ANTAL * if(aktivitetsid = 2,2,1)

Om aktivitetsid = 2 eller 1 så ggr den med 2?

Peter SMedlem sedan dec. 20025 483 inlägg
#11

Om aktivitetsid = 2 returneras 2, annars 1.

SjodahlMedlem sedan maj 20033 218 inlägg
#12

aha.. om jag vill kolla om den är lika med ett par olika värden?

if(aktivitetsid = (3 || 4 || 6),2,1))

eller så enkelt är det inte?
hehe nu är jag ute på djupvatten känns det som ;)

LarsGMedlem sedan dec. 200012 464 inlägg
#13

Använd inte if. Använd case.

Använd inte || . Använd or

  case when aktivitestid in (3,4,6) then 2 else 1 end
Peter SMedlem sedan dec. 20025 483 inlägg
#14

LarsG skrev:

Använd inte if. Använd case.

Är det för att IF inte är standardiserat, till skillnad från CASE?

SjodahlMedlem sedan maj 20033 218 inlägg
#15

Fungerar strålande!
Tackar för alla snabba svar.

LarsGMedlem sedan dec. 200012 464 inlägg
#16

Är det för att IF inte är standardiserat, till skillnad från CASE?

Svar ja.

Peter SMedlem sedan dec. 20025 483 inlägg
#17

LarsG skrev:

Svar ja.

Vielen dank! :bire

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