滥用聚合函数 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;
假设我有一个名为 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;