我有一个表“mytable”,其中有许多“坏”和“好”记录:
|id|good|hour |
|1 |t |12:00|
|2 |f |12:00|
|3 |t |13:00|
|4 |t |13:00|
|5 |t |13:00|
|6 |f |14:00|
....
字符串
我当前的查询是:
SELECT
h,
JSON_AGG(data)
FROM (
hour AS h,
JSON_BUILD_OBJECT(CASE WHEN good = TRUE THEN 'good' ELSE 'bad' END, COUNT(*)) AS data
FROM mytable
GROUP BY h, good
) AS foo
GROUP BY h
ORDER BY h;
型
我得到的结果是:
12:00 | [{"good" : 1}, {"bad" : 1}]
13:00 | [{"good" : 3}]
14:00 | [{"bad" : 1}]
...
型
但我想要的结果是:
12:00 | {"good" : 1, "bad" : 1}
13:00 | {"good" : 3, "bad" : 0}
14:00 | {"good" : 0, "bad" : 1}
...
型
有没有办法得到它(合并两个JSON对象合并成一个)?谢谢!
3条答案
按热度按时间gkl3eglg1#
json_build_object()
只有一个聚合级别就足够了:字符串
Demo on DB Fiddle:
型
y0u0uwnf2#
尝试用
JSON_BUILD_OBJECT
替换JSON_AGG
。这应该会有帮助!ki1q1bka3#
如果你使用
json_build_object
,你将不得不手动输入每个字段,所以你可以使用to_json
,json对象(不带数组)将自动生成,希望对某人有用