sql >> Database teknologi >  >> RDS >> Sqlserver

sql gruppe efter versus distinkt

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.



  1. Standard rækkefølge for udvalgt forespørgsel i oracle

  2. INSTR() Svarende til SQL Server

  3. Brug af bindevariable med dynamisk SELECT INTO-sætning i PL/SQL

  4. Vælg et tilfældigt udsnit af resultater fra et forespørgselsresultat