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

按子句列名分组,而不在选择列表中选择

汪深
2023-03-14
问题内容
select person
from person
inner join collectionmember
    on sourceobjectid=personid
group by sourceobjectid 
having count(sourceobjectid)>1;

据说如果使用group by子句,则select列列表中必须存在group by列名,但是上面的查询不需要选择sourceobjectid。


问题答案:

结果 不是
遇到的第一行。MySQL非常清楚所谓的“隐藏列”的使用。引用文档:

MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP
BY子句中命名的非聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用此功能来避免不必要的列排序和分组,从而获得更好的性能。但是,这主要在每个组的每个未聚合列中未在GROUP
BY中命名的所有值都相同时才有用。服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,通过添加ORDER
BY子句不能影响从每个组中选择值。选择值之后,将对结果集进行排序,并且ORDER BY不会影响服务器在每个组中选择哪个值。

此扩展的目的是允许查询在表的主键上进行分组的位置,而不必放在所有其他列中。此行为实际上与ANSI标准一致。

在其他情况下,可能会使用“隐藏列”。选择的值是 任意的 。MySQL甚至不保证它们来自同一行(尽管实际上,它们确实来自同一行)。



 类似资料:
  • 在Loc vs. iloc vs. ix vs. at vs. iat的答案中选择?例如。 现在我想要所有的栏目,除了“食物”和“高度”。 我认为类似于的东西可以工作,但是Python返回。 我知道有一种解决方法:。然而,在我的现实生活中,我有数百列要删除。键入所有列名是如此低效。 我期待类似于R语言中的或。 还阅读了选择/排除Pandas中的列集。

  • 本文向大家介绍MySQL 按列名选择,包括了MySQL 按列名选择的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果            

  • 问题内容: 我想了解MySQL中的某些特定行为。运行“ select @@ version”,我看到我的版本是5.6.34-log。 让我使用生成的表放置样本,以使其更易于重现: 正如标题所建议的那样,我最初搜索的是如何通过别名选择列,以便重用计算所得的字段,从而避免了冗长的查询。如文档中所述,大多数答案要么建议使用子查询,要么使用变量- 一种可读性差,而另一种则不能由自己的数据库开发人员来保证。

  • 问题内容: 我创建了一个客户c#DropDownList控件,可以将其内容呈现为optgroup(不是从头开始,我编辑了一些在Internet上找到的代码,尽管我确切地了解了它的作用),并且工作正常。 但是,我现在遇到一种情况,我需要在下拉菜单中有两个缩进级别,即 但是,在上面的示例代码段中,它呈现的缩进量与相同。 有没有一种方法可以产生我想要的嵌套optgroup行为? 问题答案: 好的,如果有

  • 问题内容: 我正在尝试向先前存在的应用程序中添加功能,并且遇到了如下MySQL视图: 好,所以有一些聚合函数。您可以选择personID,因为您正在对其进行分组。但是它还会选择不在聚合函数中并且不属于GROUP BY子句的列。这怎么可能???它是否只是选择一个随机值,因为每个组中的值肯定不是唯一的? 我来自(MSSQL Server),那是一个错误。有人可以向我解释此行为以及为什么它在MySQL中

  • 问题内容: 我链接到允许在列名称中使用句点的ProficyHistorian。因为数据是以非DBMS格式存储的,所以我不能用来获取数据,因为表没有设置模式。因此,我必须使用四部分名称语法来获取数据。此示例有效: 但这失败,因为 ‘。’附近的语法不正确。 列的名称在哪里 关键字’from’附近的语法不正确 也会失败 。 关于如何使SQL Server将其视为专栏的任何想法? 编辑: Martins建