对列中的预订状态进行划分和计数
Posted
技术标签:
【中文标题】对列中的预订状态进行划分和计数【英文标题】:Dividing and counting the booking status in columns 【发布时间】:2021-09-29 15:05:58 【问题描述】:我正在尝试创建客户预订状态的细分。查询有效,但每列显示相同的数字。我添加了一张图片来展示结果。
select distinct client.id,
client.company_name,
count(CASE WHEN booking.status = 'ok' THEN 1 ELSE 0 END) as "confirmed",
count(CASE WHEN booking.status = 'CA' THEN 1 ELSE 0 END) as "cancelled" ,
count(CASE WHEN booking.status = 'BU' THEN 1 ELSE 0 END) as "BU"
from client
join auth_user on auth_user.id = client.user_id
join booking on booking.client_id = client.id
where auth_user.date_joined >= '04-01-2021'
group by 1, 2
【问题讨论】:
你正在使用count
,试试sum
。
【参考方案1】:
COUNT
计算非空值。因此,在您的解决方案中,每一行都被计算在内。你可以使用条件来代替CASE WHEN
:
select distinct client.id,
client.company_name,
count(booking.status = 'ok' OR NULL) as "confirmed",
count(booking.status = 'CA' OR NULL) as "cancelled" ,
count(booking.status = 'BU' OR NULL) as "BU"
from client
join auth_user on auth_user.id = client.user_id
join booking on booking.client_id = client.id
where auth_user.date_joined >= '04-01-2021'
group by 1, 2
计数聚合内的条件计算为TRUE
或NULL
。
【讨论】:
【参考方案2】:感谢您的快速回复。 我尝试了您的解决方案,但结果看起来不准确。 enter image description here
【讨论】:
以上是关于对列中的预订状态进行划分和计数的主要内容,如果未能解决你的问题,请参考以下文章