Jaha, och vad vill du göra? :q
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 · 325 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 :OO
HJÄLP!
Jaha, och vad vill du göra? :q
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 :p
cCity blir också multiplicerat med antalet armys-rader. Annars skulle jag kunna löst det på ett styggt sätt :P
(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 :p
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. :r 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? :q 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? :q 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å? :q