GROUP BY
kortlægger grupper af rækker til én række pr. særskilt værdi i specifik kolonner, som ikke engang nødvendigvis behøver at være på valglisten.
SELECT b, c, d FROM table1 GROUP BY a;
Denne forespørgsel er lovlig SQL (rettelse: kun i MySQL; faktisk er det ikke standard SQL og ikke understøttet af andre mærker). MySQL accepterer det, og det stoler på, at du ved, hvad du laver, ved at vælge b
, c
og d
på en utvetydig måde, fordi de er funktionelle afhængigheder af a
.
Microsoft SQL Server og andre mærker tillader dog ikke denne forespørgsel, fordi den ikke let kan bestemme de funktionelle afhængigheder. rediger: Standard SQL kræver i stedet, at du følger Enkeltværdi-reglen , dvs. hver kolonne i valglisten skal enten være navngivet i GROUP BY
klausul eller på anden måde være et argument til en sæt funktion.
Hvorimod DISTINCT
ser altid på alle kolonner i valglisten, og kun disse kolonner. Det er en almindelig misforståelse, at DISTINCT
giver dig mulighed for at angive kolonnerne:
SELECT DISTINCT(a), b, c FROM table1;
På trods af at parentesen gør DISTINCT
ligne funktionskald, det er det ikke. Det er en forespørgselsindstilling, og en særskilt værdi i et af de tre felter på valglisten vil føre til en særskilt række i forespørgselsresultatet. Et af udtrykkene i denne valgliste har parenteser omkring sig, men dette vil ikke påvirke resultatet.