Jaha, och vad vill du göra?
Dessutom kommer ju din Order by-klausul att innehålla ett numeriskt värde. Hur ska du kunna ordna något efter en siffra?
Efter Order by ska stå den/de kolumn(er) du vill ordna resultatet efter.
12 svar · 353 visningar · startad av ZeTa
Här är min SQL:
SELECT accounts.ID, accounts.owner, accounts.race, (Sum(citys.s1) + Sum(armys.s1)) AS sumS1, (Sum(citys.s2) + Sum(armys.s2)) AS sumS2, (Sum(citys.s3) + Sum(armys.s3)) AS sumS3, accounts.kingdomID, Count(citys.ID) AS cCity
FROM accounts, armys, citys
WHERE accounts.ID = citys.ownerID AND accounts.ID = armys.ownerID GROUP BY accounts.ID, owner, race, kingdomID
ORDER BY (Sum(citys.s1) + Sum(citys.s2) * 2 + Sum(citys.s3) * 3 + Sum(armys.s1) + Sum(armys.s2) * 2 + Sum(armys.s3) * 3) DESC
sumS1, sumS2 och sumS3 blir för stora! Tror Sum(armys.*) blir räknat gånger antal Count(citys.ID) tror jag.. typ
HJÄLP!
Jaha, och vad vill du göra?
Dessutom kommer ju din Order by-klausul att innehålla ett numeriskt värde. Hur ska du kunna ordna något efter en siffra?
Efter Order by ska stå den/de kolumn(er) du vill ordna resultatet efter.
aasah skrev:
Jaha, och vad vill du göra?
Jag vill att sumS1 ska bli summan av antalet s1 i armys och citys. Inte som det är nu att jag får produkten.
aasah skrev:
Dessutom kommer ju din Order by-klausul att innehålla ett numeriskt värde. Hur ska du kunna ordna något efter en siffra?
Det går alldeles utmärkt att ordna efter en siffra! 1 kommer före 3 och 51 kommer före 52 osv.
Scripted som jag använder SQL-satsen till funkar, bara det att sumS1 blir typ 500 gånger större än det ska vara
cCity blir också multiplicerat med antalet armys-rader. Annars skulle jag kunna löst det på ett styggt sätt
(Sum(citys.s1) + Sum(armys.s1)/Count(citys.ID)) AS sumS1
anyone?
Dela upp det i två frågor. En med count på city och en med summering.
Efter Order by ska stå den/de kolumn(er) du vill ordna resultatet efter.
Nej, det stämmer inte. Det går att ange uttryck i en order by.
Dela upp det i två frågor. En med count på city och en med summering.
Jo, jag fick göra sö och sen dela med count på citys
Så det blir rätt värden nu, även fast det blir stygga värden med summeringe. Fast skit samma, huvudsaken det funkar
LarsG skrev:
aasah skrev:
Efter Order by ska stå den/de kolumn(er) du vill ordna resultatet efter.
Nej, det stämmer inte. Det går att ange uttryck i en order by.
Jag är ledsen om jag sa något som var felaktigt. Det var inte med flit.
Men, jag trodde att när man skrev tex:
Select a, b, c .... order by 2
Så blev det samma som att skriva
Select a, b, c .... order by b - i det här fallet.
Uppenbarligen har jag fel, så vad gäller? Och kan någon ange ett exempel med ett uttryck av ZeTas typ i order by, vilket förklarar vad som händer och hur det funkar med numeriska uttryck där?
Skulle uppskattas!
Nja, helt fel har du inte. Om man skriver en numerisk literal (t.ex. ORDER BY 2)
i ORDER BY så tolkas den som en resultatkolumnsposition, precis som du angav. Jag har för mig att detta inte är helt rumsrent enligt SQL-standarden, men det är så det funkar i Access och MS SQL Server.
ORDER BY 2
är alltså inte samma sak som
ORDER BY 2*1
emission skrev:
Nja, helt fel har du inte. Om man skriver en numerisk literal (t.ex. ORDER BY 2)
i ORDER BY så tolkas den som en resultatkolumnsposition, precis som du angav. Jag har för mig att detta inte är helt rumsrent enligt SQL-standarden, men det är så det funkar i Access och MS SQL Server.ORDER BY 2
är alltså inte samma sak som
ORDER BY 2*1
OK, tack! Och bra att veta att det inte var helt fel. Men... vad innebär Order by 2*1 då? Ett exempel skulle verkligen uppskattas.
Att använda en siffra för att ange en kolumn i select-listan försvann ur standarden i och med SQL 99. Då tillät man att man i stället använde ett kolumnalias
select sum(a) as s, c from t group by c order by s desc
Ovanstående är alltså det rekommenderade sättet men det fungerar t.ex. inte i access.
Att använda en konstant i order by innebär enligt SQL 99 i princip ingenting eftersom det blir samma värde för alla poster och därmed inte påverkar sorteringsordningen alls.
Däremot om man använder t.ex.
select a,b from t order by a+b
så blir värdet (eventuellt) olika för olika poster och kan därmed påverka sorteringsordningen.
Tack LarsG för hela genomgången!
LarsG skrev:
...Däremot om man använder t.ex.
select a,b from t order by a+bså blir värdet (eventuellt) olika för olika poster och kan därmed påverka sorteringsordningen.
Om
a b
1 3
2 1
3 1
Så kommer det enligt satsen ovan ut i ordningen:
a+b = 3
a b
2 1
a+b = 4
a b
1 3
3 1
Har jag fattat rätt då?