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子句中”]]
AWS Redshift 列“view_table_B.cost”必须出现在 GROUP BY 子句中或用于聚合函数