对列中的预订状态进行划分和计数

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

计数聚合内的条件计算为TRUENULL

【讨论】:

【参考方案2】:

感谢您的快速回复。 我尝试了您的解决方案,但结果看起来不准确。 enter image description here

【讨论】:

以上是关于对列中的预订状态进行划分和计数的主要内容,如果未能解决你的问题,请参考以下文章

对列中的数据进行排序[重复]

在 SQL 中对列中的序号进行编号

按共同值对列中的项目进行分组,然后显示为百分比

使用 data.table 对列进行计数和聚合/汇总

Excel公式,如果一列中存在重复且另一列中存在特定文本,则对列进行求和

SQL:按日期分组并对列中的值求和