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

Er disse to forespørgsler ens - GROUP BY vs. DISTINCT?

Dit eksempel nr. 2 fik mig til at klø mig i hovedet i et stykke tid - jeg tænkte ved mig selv:"Du kan ikke DISTINCT en enkelt kolonne, hvad ville det betyde?" - indtil jeg indså, hvad der foregår.

Når du har

SELECT DISTINCT(t.ItemNumber)

du er ikke , trods tilsyneladende, faktisk beder om distinkte værdier af t.ItemNumber ! Dit eksempel #2 bliver faktisk analyseret på samme måde som

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

med syntaktisk korrekte, men overflødige parenteser omkring t.ItemNumber . Det er for resultatsættet som helhed, der DISTINCT gælder.

I dette tilfælde, da din GROUP BY grupper efter den kolonne, der faktisk varierer, får du de samme resultater. Jeg er faktisk lidt overrasket over, at SQL Server ikke gør det (i GROUP BY eksempel) insisterer på, at den underforespurgte kolonne er nævnt i GROUP BY liste.



  1. Oracle:hvordan får man procent af totalen ved en forespørgsel?

  2. EntityFramework 6.1.3 og MySQL DbFunctions.TruncateTime eksisterer ikke?

  3. Min simple MySql-forespørgsel bruger ikke indeks

  4. Linkadvarsler under opbygning af applikation mod mysql-connector-c/libmysqlclient/mysql C API