我正在查詢一個 Presto 表,我想在其中計算某個行的某個子集占總數的百分比。
考慮這樣的表:
| ID | 米 |
|---|---|
| 1 | 5 |
| 1 | 7 |
| 2 | 9 |
| 3 | 8 |
我想查詢以報告每個 id 貢獻了多少總度量 (m)。在此示例中,度量列的總數為 29 我可以通過類似...的查詢找到它
SELECT SUM("m") FROM t;
輸出:
sqlite> SELECT SUM("m") FROM t;
29
然后我想按 id 對一些 id 進行小計,例如
SELECT "id", SUM("m") AS "sub_total" FROM t WHERE "id" IN ('1','3') GROUP BY id;
輸出:
sqlite> SELECT "id", SUM("m") AS "sub_total" FROM t WHERE "id" IN ('1','3') GROUP BY id;
1|12
3|8
現在我想添加第三列,其中小計除以總計 (29) 以獲得每個選定 ID 的百分比。
我試過了:
sqlite>
WITH a AS (
SELECT SUM("m") AS g FROM t )
SELECT "id", SUM("m") AS "sub_total", SUM(m)*100/"a"."g"
FROM a, t
WHERE "t"."id" IN ('1','3') GROUP BY "t"."id";
輸出:
1|12|41
3|8|27
這在 SQLLite3 中都很好!但是當我將它轉換為我的實際 Presto DB(以及正確的表和列)時,我收到了這個錯誤:
presto error: line 10:5: 'a.g' must be an aggregate expression or appear in GROUP BY clause
我不明白我在這里缺少什么,或者為什么這在 Presto 中會有所不同。
uj5u.com熱心網友回復:
當您GROUP BY的查詢中有 a 時,查詢回傳的所有運算式必須是:
- 您分組的運算式
- 或聚合函式
例如,如果你這樣做GROUP BY id,結果查詢將回傳一行id- 你不能只使用m,因為id = 1有兩個值:5和7- 那么應該回傳什么?第一個值,最后一個,總和,平均值?您需要使用聚合函式(如sum(m).
與a.g- 您需要將其添加到GROUP BY.
WITH a AS (
SELECT SUM("m") AS g FROM t )
SELECT "id", SUM("m") AS "sub_total", SUM(m)*100/"a"."g"
FROM a, t
WHERE "t"."id" IN ('1','3') GROUP BY "t"."id", "a"."g";
PrestoDB 在這里沒有什么特別之處,它更多的是不那么嚴格的 SQLite,實際上大多數其他資料庫引擎都會抱怨你的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431089.html
上一篇:Swift-將音頻URL轉換為視頻URL不在照片庫中播放
下一篇:如何獲取日期的最后一次出現?
