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

sql raggruppa per rispetto a distinto

GROUP BY mappa i gruppi di righe su una riga, per valore distinto in specifico colonne, che non devono nemmeno trovarsi nell'elenco di selezione.

SELECT b, c, d FROM table1 GROUP BY a;

Questa query è SQL legale (correzione: solo in MySQL; in realtà non è SQL standard e non è supportato da altri marchi). MySQL lo accetta e si fida che tu sappia cosa stai facendo, selezionando b , c e d in modo inequivocabile perché sono dipendenze funzionali di a .

Tuttavia, Microsoft SQL Server e altri marchi non consentono questa query, perché non può determinare facilmente le dipendenze funzionali. modifica: Invece, l'SQL standard richiede di seguire la Regola valore singolo , ovvero ogni colonna nell'elenco di selezione deve essere nominata nel GROUP BY clausola oppure essere un argomento per una funzione di insieme.

Mentre DISTINCT esamina sempre tutte le colonne nell'elenco di selezione e solo quelle colonne. È un malinteso comune che DISTINCT consente di specificare le colonne:

SELECT DISTINCT(a), b, c FROM table1;

Nonostante le parentesi che fanno DISTINCT sembra una chiamata di funzione, non lo è. È un'opzione di query e un valore distinto in uno qualsiasi dei tre campi dell'elenco di selezione porterà a una riga distinta nel risultato della query. Una delle espressioni in questo elenco di selezione è racchiusa tra parentesi, ma ciò non influirà sul risultato.