小编典典

这两个查询是否相同-GROUP BY与DISTINCT?

sql

这两个查询似乎返回相同的结果。那是巧合还是真的一样?

1。

SELECT t.ItemNumber,
  (SELECT TOP 1 ItemDescription
   FROM Transactions
   WHERE ItemNumber = t.ItemNumber
   ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
GROUP BY 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

有点解释:我试图从充满交易的表中获得不同的项目清单。对于每个项目,我正在寻找ItemNumber(标识字段)和最新的ItemDescription。


阅读 221

收藏
2021-03-23

共1个答案

小编典典

您的示例#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列表中提到子查询列感到有些惊讶。

2021-03-23