考慮以下:
CREATE TABLE IF NOT EXISTS person (
id BIGSERIAL,
favorite_color TEXT,
PRIMARY KEY (id)
);
INSERT INTO person (favorite_color) VALUES ('red');
INSERT INTO person (favorite_color) VALUES ('green');
INSERT INTO person (favorite_color) VALUES ('blue');
INSERT INTO person (favorite_color) VALUES ('blue');
INSERT INTO person (favorite_color) VALUES ('blue');
我現在想查詢表,為我COUNT提供所有行并favorite_color = blue回傳所有行。如何使用單個 postgresql 查詢實作以下輸出?
{
"total" 3,
"results": [
{"id": 3, "favorite_color": "blue"},
{"id": 4, "favorite_color": "blue"},
{"id": 5, "favorite_color": "blue"},
]
}
我知道如何撰寫SQL陳述句,我在問是否可以撰寫單個SQL陳述句來實作我想要的結果,反對兩次訪問資料庫(一次為計數,第二次為結果)。
uj5u.com熱心網友回復:
您可以使用 的視窗版本count()來獲取計數。
SELECT json_build_object('total', max(total),
'results', json_agg(element))
FROM (SELECT count(*) OVER () AS total,
row_to_json(person) AS element
FROM person
WHERE favorite_color = 'blue') AS x;
資料庫<>小提琴
uj5u.com熱心網友回復:
這是一個帶有標量子查詢且沒有視窗函式或min(). 讓優化器獨自完成它的作業。
with p as (select * from person where favorite_color = 'blue')
select jsonb_build_object(
'total', count(*),
'results',
(
select jsonb_agg(to_jsonb(t))
from (select id, favorite_color from p) t
))
from p;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385360.html
標籤:sql json PostgreSQL的
