sql >> Databáze >  >> RDS >> Sqlserver

Jsou tyto dva dotazy stejné – GROUP BY vs. DISTINCT?

Z vašeho příkladu č. 2 jsem se chvíli drbal na hlavě – v duchu jsem si říkal:„Nemůžeš DISTINCT jeden sloupec, co by to znamenalo?" - dokud jsem si neuvědomil, co se děje.

Když máte

SELECT DISTINCT(t.ItemNumber)

nejste , navzdory zdání ve skutečnosti požaduje odlišné hodnoty z t.ItemNumber ! Váš příklad č. 2 je ve skutečnosti analyzován stejně jako

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

se syntakticky správnými, ale nadbytečnými závorkami kolem t.ItemNumber . DISTINCT je pro výslednou sadu jako celek platí.

V tomto případě, protože vaše GROUP BY skupiny podle sloupce, který se ve skutečnosti liší, získáte stejné výsledky. Vlastně mě trochu překvapuje, že to SQL Server nedělá (v GROUP BY příklad) trvejte na tom, aby byl poddotazovaný sloupec uveden v GROUP BY seznam.



  1. Zploštění sloupce JSONB vnořeného v Postgresu

  2. mysql PDO a dynamická SQL injekce uložená procedura

  3. jak vzít data ze souboru csv a uložit do grálů pomocí mysql?

  4. Jak používat poznámky Hibernate k přidání indexu do Lob / Clob / tinyblob