假設我有一個名為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 )
uj5u.com熱心網友回復:
使用子查詢查找整個表的平均值:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410108.html
標籤:
上一篇:如何在SQLite的單個陳述句中從多個不相關的表中洗掉?
下一篇:小數點后替換SQL
