【问题标题】:Misuse of aggregate function avg()滥用聚合函数 avg()
【发布时间】:2022-01-12 13:32:35
【问题描述】:

假设我有一个名为recent_grads 的表,它有major、sharewomen 列,其中major 是一个字符串,例如“engineering”、“medical”等,sharewomen 是一个浮点数,例如“1230.23”等。

我想选择并过滤大于sharewomen列平均值的行。

我想知道为什么这个查询不起作用。

SELECT *
FROM recent_grads
WHERE ShareWomen > AVG(ShareWomen);

它目前给我这个错误。

(sqlite3.OperationalError) 滥用聚合函数 AVG() [SQL: SELECT * FROM recent_grads WHERE ShareWomen > AVG(ShareWomen);] (此错误的背景:http://sqlalche.me/e/e3q8

【问题讨论】:

  • 如果没有子请求,您将无法实现您想要的。并且 where 子句中不允许使用聚合函数。
  • 请仅标记您正在使用的单个 RDBMS,而不是4 个完全不同的RDBMS。请更正您的标签。

标签: sql sqlite


【解决方案1】:

使用子查询查找整个表的平均值:

SELECT *
FROM recent_grads
WHERE ShareWomen > (SELECT AVG(ShareWomen) FROM recent_grads);

这很简单,也是我推荐的。对于更复杂的版本,您可以使用 AVG() 作为解析函数:

WITH cte AS (
    SELECT r.*, AVG(ShareWomen) OVER () AS AvgShareWomen
    FROM recent_grads r
)

SELECT *
FROM cte
WHERE ShareWomen > AvgShareWomen;

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2011-02-16
    • 1970-01-01
    • 2020-07-10
    • 2010-10-13
    • 2012-03-16
    相关资源
    最近更新 更多