我有Users
表
它有id,用户名,A
和B
作为我的列。
我还有Votes
表。
用户可以对A
和B
进行投票。
它有id,user_id外键,A_id外键和B_id外键。
我想对用户进行查询,并获得A
的投票数和B
投票数。
所以我想找一个id为1的用户
我如何得到像
这样的东西{
"id": 1,
"display_name": "test",
"A" : 32,
"B" : 132
}
假设Votes表中有32行,而Votes表中有B行为132行。
答案 0 :(得分:0)
简化表:
t=# select* from users;
i | t
---+---
1 | A
1 | B
1 | B
2 | A
2 | A
2 | B
(6 rows)
查询:
t=# select distinct
i
, sum(case when t='A' then count(1) filter (where t='A') else 0 end) over (partition by i) a
, sum(case when t='B' then count(1) filter (where t='B') else 0 end ) over (partition by i)b
from users
group by i,t
order by i;
i | a | b
---+---+---
1 | 1 | 2
2 | 2 | 1
(2 rows)