GROUP BY
mappar grupper av rader till en rad, per distinkt värde i specifikt kolumner, som inte ens nödvändigtvis måste finnas i urvalslistan.
SELECT b, c, d FROM table1 GROUP BY a;
Den här frågan är laglig SQL (korrigering: endast i MySQL; Det är faktiskt inte standard SQL och stöds inte av andra märken). MySQL accepterar det och litar på att du vet vad du gör genom att välja b
, c
och d
på ett entydigt sätt eftersom de är funktionella beroenden av a
.
Microsoft SQL Server och andra märken tillåter dock inte den här frågan, eftersom den inte lätt kan fastställa funktionella beroenden. redigera: Istället kräver standard SQL att du följer Enkelvärdesregeln , dvs varje kolumn i urvalslistan måste antingen namnges i GROUP BY
sats eller annars vara ett argument till en uppsättningsfunktion.
Medan DISTINCT
tittar alltid på alla kolumner i urvalslistan, och endast de kolumnerna. Det är en vanlig missuppfattning att DISTINCT
låter dig ange kolumnerna:
SELECT DISTINCT(a), b, c FROM table1;
Trots att parentesen gör DISTINCT
ser ut som funktionsanrop, det är det inte. Det är ett frågealternativ och ett distinkt värde i något av de tre fälten i urvalslistan leder till en distinkt rad i frågeresultatet. Ett av uttrycken i den här urvalslistan har parenteser runt sig, men detta påverkar inte resultatet.