我有2张桌子:
我愿意显示用户详细信息,以及他们的有效预订数和总预订数(总预订数将是特定用户在“预订”表中的所有条目)。
要显示的表: 用户名,有效预订(数量),总预订(数量)
目前,我无法对此进行有效的查询。 我的数据库是PostgreSQL。
请协助。
谢谢
答案 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
根据评论进行编辑:
Filter
和Postgresql
支持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);