Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sind diese beiden Abfragen identisch - GROUP BY vs. DISTINCT?

Dein Beispiel #2 hat mich eine Weile am Kopf kratzen lassen - ich dachte mir:"Du kannst nicht DISTINCT eine einzelne Spalte, was würde das bedeuten?" - bis ich begriff, was los ist.

Wenn Sie

SELECT DISTINCT(t.ItemNumber)

du bist nicht , trotz des Anscheins, der tatsächlich nach unterschiedlichen Werten von t.ItemNumber fragt ! Ihr Beispiel Nr. 2 wird tatsächlich genauso geparst wie

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

mit syntaktisch korrekten aber überflüssigen Klammern um t.ItemNumber . Für die Ergebnismenge als Ganzes gilt DISTINCT gilt.

In diesem Fall, da Ihr GROUP BY Gruppen nach der Spalte, die tatsächlich variiert, erhalten Sie die gleichen Ergebnisse. Ich bin tatsächlich etwas überrascht, dass SQL Server dies nicht tut (in der GROUP BY Beispiel) darauf bestehen, dass die unterabgefragte Spalte in GROUP BY erwähnt wird Liste.