0

我在使用 have 子句时遇到问题。由于我不明白的原因,以下 2 个查询会产生一些错误。

以下查询生成此错误:“有子句”中的未知列“编号”

select avg(number),name from test
group by name
having avg(number) < number

然后以下查询生成此错误:“有子句”中的未知列“编号”

select name from test 
group by name
having number=min(number)

number当我在表中有列时,为什么会出现这些错误test

4

1 回答 1

1

HAVINGGROUP 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
于 2012-09-26T11:36:36.237 回答