Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Тези две заявки еднакви ли са - GROUP BY срещу DISTINCT?

Вашият пример №2 ме накара да се почеша по главата известно време - помислих си:„Не можеш да DISTINCT една колона, какво би означавало това?" - докато не осъзнах какво става.

Когато имате

SELECT DISTINCT(t.ItemNumber)

ти не си , въпреки външния вид, всъщност иска отделни стойности на t.ItemNumber ! Вашият пример #2 всъщност се анализира по същия начин като

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

със синтактично правилни, но излишни скоби около t.ItemNumber . Това е DISTINCT за набора от резултати като цяло се прилага.

В този случай, тъй като вашият GROUP BY групи по колоната, която всъщност варира, получавате същите резултати. Всъщност съм леко изненадан, че SQL Server не (в GROUP BY пример) настояват подзаявената колона да е спомената в GROUP BY списък.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server преобразува низ в дата и час

  2. JPA съставен първичен ключ

  3. SQL Server ROWCOUNT_BIG()

  4. Улавяне на броя от SQL заявка

  5. Как да създадете композитен първичен ключ в SQL Server (пример за T-SQL)