Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy te dwa zapytania są takie same — GROUP BY vs. DISTINCT?

Twój przykład nr 2 sprawił, że przez chwilę drapałem się po głowie - pomyślałem:„Nie możesz DISTINCT pojedyncza kolumna, co by to oznaczało?” – dopóki nie zorientowałem się, co się dzieje.

Kiedy masz

SELECT DISTINCT(t.ItemNumber)

nie jesteś , wbrew pozorom, faktycznie prosi o odrębne wartości z t.ItemNumber ! Twój przykład nr 2 faktycznie jest analizowany tak samo jak

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

z poprawnymi składniowo, ale zbędnymi nawiasami wokół t.ItemNumber . To dla zestawu wyników jako całości DISTINCT dotyczy.

W tym przypadku, ponieważ Twój GROUP BY grup według kolumny, która faktycznie się zmienia, otrzymasz te same wyniki. Właściwie jestem nieco zaskoczony, że SQL Server tego nie robi (w GROUP BY przykład) nalegaj, aby podzapytana kolumna była wymieniona w GROUP BY lista.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL działa szybciej niż procedura składowana

  2. SQL Server 2016:zapisywanie wyników zapytania w pliku CSV

  3. Zmuś Oracle do zwrócenia TOP N wierszy z SKIP LOCKED

  4. Jaki jest najlepszy sposób na utworzenie wartości ciągu przy użyciu kolumny z tabeli z wierszami o tym samym identyfikatorze?

  5. Jak rozwiązać błąd system.data.sqlclient.sqlexception (0x80131904)?