GROUP BY 子句并在查询中包含非聚合列

Posted

技术标签:

【中文标题】GROUP BY 子句并在查询中包含非聚合列【英文标题】:GROUP BY clause and contains nonaggregated column in Query 【发布时间】:2019-05-24 16:05:40 【问题描述】:

我在显示此查询和 GROUP BY 查询时遇到了一些问题。无论我对 GROUP BY 做什么,我都会不断收到相同的错误。非常感谢任何帮助。

目前出现此错误:

错误: SELECT 列表的表达式 #2 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“myData.stateName”;这与 sql_mode=only_full_group_by 不兼容

这是我的 sql:

SELECT 
  stateAbv,
  stateName,
  '' AS cityName,
  count(*) AS state_count 
from
  myData 
GROUP BY stateAbv 
union
SELECT 
  stateAbv,
  stateName,
  city AS cityName,
  COUNT(*) AS city_count 
FROM
  myData 
GROUP BY stateAbv,
  city 
ORDER BY stateAbv,
  cityName

【问题讨论】:

GROUP BY stateAbv, stateName 向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example 尝试在rextester.com 中创建样本 【参考方案1】:

您收到错误GROUP BY clause and contains nonaggregated column 'myData.stateName',因为正如它所说,stateName 列不在 group by 子句中。所以它是说你正在将一些行分组在一起,当查询尝试对stateName 列进行分组时,它可能在被分组的行中有不同的值。查询不知道哪一个是在分组行中显示的正确值。您需要提供一种方法来告诉查询哪个值是保留在分组行中的正确值。假设您有一个数字列,并且在您分组在一起的行中具有值1,2,3 and 4。您可以说我想要这些数字组中的最大数字,然后通过 MAX(column_name) 执行此操作,分组行将显示 4

在您的查询中,如果 stateName 中的所有值在被分组的行中都相同,只需在您的 group by 子句中添加 stateName

【讨论】:

以上是关于GROUP BY 子句并在查询中包含非聚合列的主要内容,如果未能解决你的问题,请参考以下文章

在非聚合中使用聚合结果导致 GROUP BY 出现问题

列“在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中”

列“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”]]

AWS Redshift 列“view_table_B.cost”必须出现在 GROUP BY 子句中或用于聚合函数

仅休眠错误:“列必须出现在 GROUP BY 子句中或在聚合函数中使用”

列“ic.inscount”必须出现在 GROUP BY 子句中或在聚合函数中使用