所以我不会得到我一直得到的这个错误。
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美元的余额。有人能帮我指出我的错误吗?我确信这是很简单的东西,但我似乎不能达到我的初学者水平。
发布于 2014-09-24 11:22:15
您收到的错误是因为您正在尝试执行聚合(即sum、avg等)。并且不将select子句中的所有列都包含到group by子句中。如果选择该列,则在使用聚合函数时也应按该列分组。
在您的特定情况下,需要在group by子句中添加substr(custzip, 1,5)。
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标准中。由于WHERE在HAVING之前执行,因此它将减少需要聚合的结果数量。
发布于 2014-09-24 11:23:30
问题不在于having子句。这就是substr(CUSTZIP, 1, 5)。以下是解决此问题的一种方法:
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。
或者,您可以使用聚合函数:
select max(substr(CUSTZIP, 1, 5)), AVG(CUSTBAL), custcity, custstate
from customer
group by CUSTCITY, custstate
having CUSTSTATE = 'wa' AND avg(CUSTBAL) > 100;发布于 2014-09-24 11:34:35
这里有一些建议:
https://stackoverflow.com/questions/26007959
复制相似问题