我正在嘗試根據VIEWSELECT 陳述句的結果在 PostgreSQL v14.x 中創建具有不同數量鍵/值對的 JSON 物件。Usingjson_agg是回傳一個物件陣列 - 每個評分可能性的鍵,以及一個值,該值是從評論表中選擇的所有評分的計數。我需要一個具有多個鍵/值對的物件,而不是陣列,其中的值對應于count()按 product_id 分組的評級列的聚合。嘗試重用json_build_object沒有按預期作業。
使用:
CREATE VIEW reviews.meta AS
SELECT product_id, json_agg(json_build_object(reviews.list.rating, reviews.list.rating))
FROM reviews.list
GROUP BY reviews.list.product_id
ORDER BY product_id;
回傳:
product_id | reviews_count
---------------------------
1 | [{"5" : 5}, {"4" : 4}]
2 | [{"4" : 4}, {"4" : 4}, {"3" : 3}, {"5" : 5}, {"2" : 2}]
但我正在尋找:
product_id | reviews_count
---------------------------
1 | {"5" : 1, "4" : 1}
2 | {"4" : 2, "3" : 1, "5" : 1, "2" : 1}
動態創建的物件:
- 按 product_id 在行中
- 其中值是出現在 review.list 表中的整數評級 (1-5) 的數量
- 在一個物件而不是一個物件陣列中
SQL / PL / pgSQL 語言的新手,任何提示將不勝感激!
感恩節快樂:)
uj5u.com熱心網友回復:
您需要兩層聚合,一層用于獲取計數,另一層用于打包計數。通過將一個查詢嵌套在另一個查詢的 FROM 中很容易做到這一點:
CREATE or replace VIEW meta AS
SELECT product_id, jsonb_object_agg(rating, count)
FROM (select product_id, rating, count(*) from list group by product_id, rating) foo
GROUP BY product_id
ORDER BY product_id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/366106.html
標籤:sql PostgreSQL的
上一篇:查詢帳戶掛起正好2天-SQL
