gpt4 book ai didi

sql - 原因 - 如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中

转载 作者:行者123 更新时间:2023-12-03 01:03:50 26 4
gpt4 key购买 nike

我知道下面的查询会导致错误 - 如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中。

SELECT DISTINCT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA'
ORDER BY birthdate;

这是什么原因呢?到底发生了什么?如果我不使用 DISTINCT 或仅在 SELECT 或 ORDER BY 城市中添加出生日期,它会给我一些输出,但不会出现错误。是因为 SELECT DISTINCT city 只给出包含城市的结果集而没有其他内容吗?

编辑-(我认为这可能是我问题的答案)

SELECT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA'

考虑上面的查询。不确定,但我认为这就是它的工作原理 - 在幕后,SQL Server 可能有一个包含所有列的结果集,但我们只显示城市列,我将其称为“显示集”。因此,按城市或任何其他列排序都是有效的。

当我们使用 SELECT DISTINCT city 时,结果集会发生什么? SQL Server 的结果集中不仅仅包含具有不同城市的行。它具有整个结果集,就像 SELECT * 查询生成的结果集一样。但是,它仅显示基于城市的不同行。现在可以根据生日对显示的集合进行排序吗?没有。

在一个拥有许多员工(即许多出生日期)的城市中,SQL Server 无法判断应该使用哪个出生日期来对显示的集合进行排序。这就是它显示错误消息的原因。

最佳答案

使用 SELECT DISTINCT 的查询可以使用 GROUP BY 重写。所以查询:

SELECT DISTINCT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA' ;

相当于:

SELECT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA'
GROUP BY city ;

并且您也不能在此处使用ORDER BYbirthdate。两个查询的原因是相同的。可能有许多(多个)行具有相同的城市出生日期不同。应该使用哪一个来订购(如果允许的话?)

但是,您可以将聚合函数与 GROUP BY 查询结合使用:

SELECT city
FROM HR.Employees
WHERE country = N'USA' AND region = N'WA'
GROUP BY city
ORDER BY MIN(birthdate) ; -- or MAX(birthdate)

关于sql - 原因 - 如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18584520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com