获取用户表中每个用户的有效预订和总预订(从1个表中获取)

时间:2020-10-26 04:35:17

标签: sql database postgresql

我有2张桌子:

  1. 用户:
  • 用户名(pk)
  1. 预订:
  • 用户名(fk)
  • 状态(A =有效,C =已取消,D =完成)

我愿意显示用户详细信息,以及他们的有效预订数和总预订数(总预订数将是特定用户在“预订”表中的所有条目)。

要显示的表: 用户名,有效预订(数量),总预订(数量)

目前,我无法对此进行有效的查询。 我的数据库是PostgreSQL。

请协助。

谢谢

3 个答案:

答案 0 :(得分:2)

在使用PostgreSQL时,您可以利用Filter()子句的优势。另外,您还必须使用Left Join,因为您需要user表中每个用户的详细信息。因此,如下编写您的查询:

select 
t1.username, 
count(*) filter (where t2.status='A') as "Active_Bookings",
count(t2.*) as "Total_Bookings"
from users t1 left join bookings t2 on t1.username=t2.username
group by 1

根据评论进行编辑: FilterPostgresql支持SQLite子句。对于其他人,count with case可以做到。下面的查询几乎适用于所有其他数据库。

select 
t1.username, 
count(case when t2.status='A' then 1 end)  as "Active_Bookings",
count(t2.*) as "Total_Bookings"
from users t1 left join bookings t2 on t1.username=t2.username
group by t1.username

您也可以使用sum(case when t2.status='A' then 1 else 0 end) as "Active_Bookings"

答案 1 :(得分:1)

您可以尝试以下-

<script src="https://unpkg.com/rxjs@6.6.3/bundles/rxjs.umd.min.js"></script>

答案 2 :(得分:0)

不太确定我是否能理解您的问题,但是根据您输入的内容尝试此操作,

select x.username,active_bookings,total_bookings from (
(select username, count(status) as active_bookings from bookings where status='A' group by username)x  join (select username,count(status) as total_bookings  from bookings group by username)y on x.username=y.username);
相关问题