我在t_table和s_table之间建立了连接表。
它们之间存在多对多的关系。
s_表格
| 标识符|s_值|
| - -|- -|
| 一个|一个|
| 2个|2个|
| 三个|三个|
t_表格
| 标识符|t值|
| - -|- -|
| 一个|100个|
| 2个|二百|
| 三个|三百|
t标识s标识表
| s标识符(_I)|测试标识|
| - -|- -|
| 一个|一个|
| 一个|2个|
| 2个|2个|
| 2个|三个|
| 三个|一个|
| 三个|三个|
首先,我通过此查询按s_table id聚合了t_value group
SELECT
t_id_s_id_table.s_id,
JSON_AGG(t_value) AS json_agg
FROM
t_id_s_id_table
LEFT JOIN
t_table
ON
t_table.id = t_id_s_id_table.t_id
GROUP BY
t_id_s_id_table.s_id
我得到了这个结果。
| s标识符(_I)|json_agg|
| - -|- -|
| 一个|100个、200个|
| 2个|两百、三百|
| 三个|一百、三百|
我想做的事
我想获取所有关联的json_agg值包括100的s_id。(这意味着s_id = 1和3)
我尝试了以下查询
SELECT *
FROM (
SELECT
t_id_s_id_table.s_id,
JSON_AGG(t_value) AS json_agg
FROM
t_id_s_id_table
LEFT JOIN
t_table
ON
t_table.id = t_id_s_id_table.t_id
GROUP BY
t_id_s_id_table.s_id
)
WHERE COUNT(json_agg = 100) > 0
但它对我不起作用。我得到了错误operator does not exist: json = integer
。
我怎样做SQL才能得到这个结果呢?我用的是PostgreSQL 11.2。提前谢谢你。
2条答案
按热度按时间nvbavucw1#
不管查询的业务逻辑如何-因为需要计算有多少个
json_agg
数组元素等于100,所以where
子句应该是或者更简单地说,等于100的数组元素是否存在
顺便说一句,最好不要使用函数名(json_agg)作为列名。
lyfkaqu12#
最简单的方法是使用
HAVING
而不是WHERE
来作用于每个组,并使用BOOL_OR运算符来比较组中是否有任何项等于100;A DBfiddle to test with.