使用having子句时遇到问题。由于我不理解的原因,以下2个查询会产生一些错误。
以下查询会生成此错误:'having clause'中的未知列'number'
select avg(number),name from test
group by name
having avg(number) < number
然后以下查询生成此错误:'having clause'中的未知列'number'
select name from test
group by name
having number=min(number)
为什么在number
表中有test
列时会出现这些错误?
答案 0 :(得分:1)
HAVING
仅对GROUP BY
子句中列出的聚合列进行操作。对于这种情况,请使用WHERE
代替HAVING
,并使用相关查询来获取MIN(number)
,如下所示:
SELECT name
FROM test
WHERE number = (SELECT MIN(number) FROM test)
GROUP BY name
修改:您的第一个查询无法再次运行的原因相同,因为您无法将HAVING
与GROUP BY
子句中未列出的任何列一起使用。如果要获得第一个查询的相同结果,可以这样写:
SELECT AVG(t1.number), t1.name
FROM test t1
INNER JOIN
(
SELECT name, AVG(number) Avg
FROM test
GROUP BY name
) t2 ON t1.name = t2.name AND t1.number < t2.Avg
GROUP BY name