gpt4 book ai didi

mysql - 选择不在 GROUP BY 子句中的列

转载 作者:可可西里 更新时间:2023-11-01 06:32:49 26 4
gpt4 key购买 nike

我正在尝试编写一个查询,该查询将仅选择具有该年唯一事件的事件的行。

例如:

Year   Event
2011 A
2011 B
2012 C
2013 B
2013 D
2014 D

因此,我想在结果中获取行 2012 C2014 D。我尝试在 Year 上执行 GROUP BY,但这不会让我选择 Event 列。2011 年和 2013 年有 2 个事件,所以这些不应该出现在结果中。

请帮忙。

编辑:我可以编写一个嵌套查询来获取只有 count(Year) = 1GROUP BY Year 的行,但我无法获取在外部查询中选择的 Event

SELECT Year, Event from table where Year in (SELECT Year from table GROUP BY Year Having count(*) = 1) as count;

最佳答案

无需使用子查询或嵌套查询。您可以简单地按 Year 字段分组并使用 HAVING COUNT(Year)=1 来查找所需的行。因此,适用的查询将是:

SELECT Year, Event
FROM table_name
GROUP BY Year
HAVING COUNT(Year)=1

您可以在以下位置找到可执行解决方案示例:

http://sqlfiddle.com/#!9/b47044/11

逻辑:当您按 Year 分组时,它会聚契约(Contract)一年的所有行。因此,2011 的计数将为 2

你可以通过运行来检查:

SELECT Year, Event, COUNT(Year) as event_count
FROM table_name
GROUP BY Year

您可以在执行过程中看到这个中间步骤:http://sqlfiddle.com/#!9/b47044/10

上述解决方案仅适用于 MySQL 版本 < 5.7。对于更高版本,请在下面找到解决方案。

对于 5.7 及更高版本,默认情况下启用 ONLY_FULL_GROUP_BY SQL 模式,因此这将失败。您可以更新此模式(引用 SELECT list is not in GROUP BY clause and contains nonaggregated column .... incompatible with sql_mode=only_full_group_by 下的答案)或者您可以使用 ANY_VALUE() 函数来引用非聚合列,因此更新查询将在 MySQL 5.7 及更高版本中运行是:

SELECT Year, ANY_VALUE(Event)
FROM table_name
GROUP BY Year
HAVING COUNT(Year)=1;

您可以在以下位置找到可执行示例:https://paiza.io/projects/e/tU-7cUoy3hQUk2A7tFfVJg

引用:https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/miscellaneous-functions.html#function_any-value

关于mysql - 选择不在 GROUP BY 子句中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56822476/

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