【问题标题】:getting errors when using having clause with aggregate functions将 have 子句与聚合函数一起使用时出错
【发布时间】:2012-09-18 00:36:25
【问题描述】:

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

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

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

那么下面的查询会产生这个错误:Unknown column 'number' in 'have Clause'

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

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

【问题讨论】:

    标签: sql


    【解决方案1】:

    HAVING 仅对GROUP BY 子句中列出的聚合列进行操作。在这种情况下,使用WHERE 而不是HAVING,并使用相关查询来获取MIN(number),如下所示:

    SELECT name 
    FROM test 
    WHERE number = (SELECT MIN(number) FROM test)
    GROUP BY name
    

    编辑: 与您的第一个查询不起作用的原因相同,因为您不能将HAVINGGROUP 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
    

    【讨论】:

    • 也解释一下使用有声明
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2018-05-19
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多