首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL GROUP BY and HAVING

SQL GROUP BY and HAVING
EN

Stack Overflow用户
提问于 2014-09-24 11:16:44
回答 3查看 127关注 0票数 3

所以我不会得到我一直得到的这个错误。

代码语言:javascript
复制
 select distinct substr(CUSTZIP, 1,5), AVG(CUSTBAL), custcity, custstate
 from customer
 group by CUSTCITY, custstate
 having CUSTSTATE = 'wa' AND avg(CUSTBAL) >100;

错误显示"not a GROUP BY expression“,并建议将”substr(CUSTZIP,1,5),AVG(CUSTBAL)“添加到group by子句,但这也不起作用。我正在尝试做的是列出邮政编码和平均余额只在华盛顿州的城市和有一个超过100美元的余额。有人能帮我指出我的错误吗?我确信这是很简单的东西,但我似乎不能达到我的初学者水平。

EN

回答 3

Stack Overflow用户

发布于 2014-09-24 11:22:15

您收到的错误是因为您正在尝试执行聚合(即sumavg等)。并且不将select子句中的所有列都包含到group by子句中。如果选择该列,则在使用聚合函数时也应按该列分组。

在您的特定情况下,需要在group by子句中添加substr(custzip, 1,5)

代码语言:javascript
复制
select substr(custzip, 1,5), custcity, custstate, avg(custbal)
from customer
where custstate = 'wa'
group by substr(custzip, 1,5), custcity, custstate
having avg(custbal) > 100;

另外,请注意,您可以删除distinct,因为group by也会处理这一点。

我还将custstate = 'wa'移到了WHERE标准中。由于WHEREHAVING之前执行,因此它将减少需要聚合的结果数量。

票数 1
EN

Stack Overflow用户

发布于 2014-09-24 11:23:30

问题不在于having子句。这就是substr(CUSTZIP, 1, 5)。以下是解决此问题的一种方法:

代码语言:javascript
复制
select substr(CUSTZIP, 1, 5), AVG(CUSTBAL), custcity, custstate
from customer
group by CUSTCITY, custstate, substr(CUSTZIP, 1, 5)
having CUSTSTATE = 'wa' AND avg(CUSTBAL) > 100;

顺便说一句,group by几乎从不需要select distinct

或者,您可以使用聚合函数:

代码语言:javascript
复制
select max(substr(CUSTZIP, 1, 5)), AVG(CUSTBAL), custcity, custstate
from customer
group by CUSTCITY, custstate
having CUSTSTATE = 'wa' AND avg(CUSTBAL) > 100;
票数 1
EN

Stack Overflow用户

发布于 2014-09-24 11:34:35

这里有一些建议:

  1. 您应该采纳在group by子句中添加substr(CUSTZIP,1,5),AVG(CUSTBAL)‘的建议。
  2. 非常注意distinct和group by,having用法。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26007959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档