我正在使用Postgres 9.6。我有三个桌子,像这样:
Table public.user
id integer
name character varying
email character varying
Table public.project
id integer
user_id integer
Table public.sale
id integer
user_id integer
user_id
是project
和sale
表中的外键。
是否可以通过单个查询获取所有用户ID的列表以及项目数量和销售数量?
所以我想要看起来像这样的最终数据:
user_id,num_projects,num_stories
121,28,1
122,43,6
123,67,2
我知道该怎么做一些项目:
SELECT "user".id, COUNT(*) AS num_visualisations
JOIN project ON project.user_id="user".id
GROUP BY "user".id
ORDER BY "user".id DESC
但是我不知道如何在单个查询中也获得销售数量。
答案 0 :(得分:1)
使用子查询进行聚合和left join
:
select u.*, p.num_projects, s.num_sales
from user u left join
(select p.user_id, count(*) as num_projects
from projects p
group by p.user_id
) p
on p.user_id = u.id left join
(select s.user_id, count(*) as num_sales
from sales s
group by s.user_id
) s
on s.user_id = u.id;