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

Queste due query sono le stesse:GROUP BY vs. DISTINCT?

Il tuo esempio n. 2 mi ha fatto grattare la testa per un po' - mi sono detto:"Non puoi DISTINCT una singola colonna, cosa significherebbe?" - finché non ho capito cosa sta succedendo.

Quando hai

SELECT DISTINCT(t.ItemNumber)

tu non , nonostante le apparenze, in realtà richiede valori distinti di t.ItemNumber ! Il tuo esempio n. 2 viene effettivamente analizzato come

SELECT DISTINCT
  (t.ItemNumber)
  ,
  (SELECT TOP 1 ItemDescription
   FROM Transactions
   WHERE ItemNumber = t.ItemNumber
   ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t

con parentesi sintatticamente corrette ma superflue intorno a t.ItemNumber . È per il set di risultati nel suo insieme che DISTINCT si applica.

In questo caso, poiché il tuo GROUP BY gruppi in base alla colonna che effettivamente varia, ottieni gli stessi risultati. In realtà sono leggermente sorpreso che SQL Server non lo faccia (in GROUP BY esempio) insistere sul fatto che la colonna sottointerrogata sia menzionata in GROUP BY elenco.