在postgresql中,我有一个包含name
和meta_data
列的用户表。 Meta_data
列jsonb,我喜欢存储数据:在PostgreSQL的子查询的WHERE子句中使用别名
"{"likes": [{"id": "1", "name": "aaa"}, {"id": "2", "name": "bbb"}, {"id": "3", "name": "ccc"}]}"
对于每一个喜欢,我想选择具有同样喜欢的用户数量。
SELECT jsonb_array_elements(users.meta_data->'likes')->>'id' AS like_id,
(SELECT count(*) FROM users WHERE users.meta_data->'likes'->>'id' = like_id) AS count_users
FROM users
此外我有user_id
列clickouts
表。我需要具有该特定like_id的用户所做的点击次数。
COUNT(clickouts.id) FILTER (
WHERE clickouts.user_id IN
(SELECT user_id FROM users WHERE users.meta_data->'likes'->>'id' = like_id)
)
这些查询不起作用。错误消息是:
column "like_id" does not exist.
你有什么建议如何做到这一点?
'..,COUNT(jsonb_array_elements(users.meta_data->” like') - >>'id')AS..'您需要重复表达式 – Mihai