当前位置: 首页 > 面试题库 >

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

裴实
2023-03-14
问题内容

我知道以下查询会导致错误-如果指定了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可能具有一个包含所有列的结果集,但只显示了city列,我将其称为“显示集”。因此,按城市或任何其他列排序是有效的。

当我们改用SELECT DISTINCT city时,结果集会怎样?SQLServer在其结果集中不仅具有包含DISTINCT城市的行。它具有整个结果集,就像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在这里使用。两个查询的原因相同。可能有许多(不止一个)相同city但不同的行birthdate。应该使用哪一个进行订购(如果允许的话?)

但是,您可以对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)


 类似资料:
  • 我在一个项目中工作,其中一个任务是创建动态查询,并有可能通过相关的懒惰的oneTo多项实体属性进行排序。我的第一次尝试是使用标准api,但是当我需要查询“非相关”字段时,我无法具体理解它,所以我切换到普通的JPQL,在那里我可以更清楚地表达自己 然而,普通JPQL似乎也有问题。其中一个用例是获取具有相关实体(例如join fetch)的AggregateRoot,其中谓词可以匹配AggregarR

  • 问题内容: 有3列:,, 如何将where的所有值都等于某个值,然后按进行排序,但不同的结果显示其对应的值呢? 我尝试了以下操作,但没有成功: 上述结果不会导致的不同值。如果我删除“ ”,则它将显示的不同值,但不会显示其相应的值。 那我该怎么办呢? 问题答案: 也许是这样的: ? 您可以在此SQL Fiddle中使用它。

  • 我有一个列表视图,当我的活动开始时,我想要第一个项目将有背景,其他项目没有任何背景。之后,如果用户选择任何其他项目,则该特定项目的背景现在将为蓝色,其余部分将没有任何背景。请帮帮我。 My layout_effect.xml 设置默认背景的GetView代码 listview的任何我的onclickListner 我的列表视图xml 请帮帮我,我怎么才能解决这个问题,我从昨天开始就被困在里面了。

  • 问题内容: 我想知道是否可以选择列的值(如果该列存在),否则选择null。换句话说,当列不存在时,我想“举起” select语句来处理这种情况。 注意,我正在巩固我的数据模型和设计。我希望在接下来的几周中排除这种逻辑,但是我真的想超越这个问题,因为数据模型修复比我现在想解决的要耗费更多时间。 另请注意,我希望能够在一个查询中执行此操作。所以我不是在寻找像这样的答案 首先检查子查询中的列。然后修改您

  • 问题内容: 我们希望对Seam EntityQuery接口和JPA模型中的2列进行排序。我们如何做到这一点? 问题答案: 如果您正在谈论,则此注释会将(目标实体的)逗号分隔属性的列表作为参数,并相应地对集合进行排序。例如,您的情况。 根据JPA 1.0规范: 9.1.28 OrderBy批注 的注释指定的集合的元素的顺序在点值的关联时的关联检索。 值排序元素的语法为orderby_list,如下所

  • 问题内容: 尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。 我有四个表: 回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。 我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC 没问题。一些简单的内部联接,我在路上。 困难在于在selec