【问题标题】:Invalid use of group function with AVG function组功能与 AVG 功能的无效使用
【发布时间】:2017-01-23 00:09:47
【问题描述】:

我对 SQL 有点陌生,这是我学习它的第二天。我收到错误“ERROR 1111 HY000: Invalid use of group function”

AVG(cost) 的值是 450,所以不要这样做(可行)

SELECT name, seller_id, cost
FROM items
WHERE cost > 450;

我想要这个(不行)

SELECT name, seller_id, cost
FROM items
WHERE cost > AVG(cost);

那么为什么第二个不起作用?

很抱歉,这似乎是一个显而易见的问题,我对 SQL 很陌生,所以我仍然不熟悉语法以及查询的解释方式。

【问题讨论】:

    标签: mysql sql sql-server database sqlite


    【解决方案1】:

    您可以在WHERE 子句中使用子查询来计算整个表的平均成本:

    SELECT name, seller_id, cost
    FROM items
    WHERE cost > (SELECT AVG(cost) FROM items)
    

    【讨论】:

    • 最好将 suquery 放到 FROM 部分。 SELECT name, Seller_id, cost FROM items i, (SELECT AVG(cost) as avg_cost FROM items) sub WHERE i.cost > sub.avg_cost
    • @StanislavL 我希望查询优化器,如果写得好,能够找出子查询与外部查询没有关联,并且只计算一次,无论它是否出现在SELECT 列表或 WHERE 子句。
    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 2011-11-30
    • 2017-07-24
    • 2016-12-11
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多