滥用聚合函数 avg()

Misuse of aggregate function avg()

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

我想select过滤大于sharewomen列平均值的行。

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

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

它目前给我这个错误。

(sqlite3.OperationalError) misuse of aggregate function AVG() [SQL: SELECT * FROM recent_grads WHERE ShareWomen > AVG(ShareWomen);] (Background on this error at: http://sqlalche.me/e/e3q8)

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

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;