SQL:在一组结果中有两个查询?

时间:2018-07-19 11:55:03

标签: sql postgresql

我正在使用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_idprojectsale表中的外键。

是否可以通过单个查询获取所有用户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

但是我不知道如何在单个查询中也获得销售数量。

1 个答案:

答案 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;