Sql 如果事件\付费\类型='付费事件'忽略/如果事件\付费\类型='免费事件'不计算组织者\ id
我有一个“组织者id”列,每个组织者可以举办许多活动,并且在“活动付费”列中,每个活动都是“免费活动”或“付费活动” 数据集示例:Sql 如果事件\付费\类型='付费事件'忽略/如果事件\付费\类型='免费事件'不计算组织者\ id,sql,Sql,我有一个“组织者id”列,每个组织者可以举办许多活动,并且在“活动付费”列中,每个活动都是“免费活动”或“付费活动” 数据集示例: organizer_id event_paid_type 9092720 free event 14360170 paid event 16167660 paid event 9092720 paid event 14360170 paid event
organizer_id event_paid_type
9092720 free event
14360170 paid event
16167660 paid event
9092720 paid event
14360170 paid event
16167660 paid event
我如何回答这个问题:
有多少组织者至少有一个付费订单,但从来没有免费订单
我知道如何计算每个组织者id的付费活动,但我不知道如果事件类型为“免费活动”,如何忽略组织者id
我的小步尝试:
SELECT organizer_id, event_paid_type, COUNT(*) as paid_event_count
FROM event_table
WHERE (event_paid_type = 'paid event')
GROUP BY organizer_id, event_paid_type
ORDER BY paid_event_count DESC;
目前的结果:
organizer_id event_paid_type paid_event_count
9092720 paid event 1
14360170 paid event 2
16167660 paid event 2
问题直接转化为使用“不存在” 另一种方法是使用条件聚合
select count(*)
from event_table
group by organizer_id
having count(case when event_paid_type='free event' then 1 end) = 0
and count(case when event_paid_type='paid event' then 1 end) > 0
我删除了多个dbms标记。只标记您实际使用的一个dbms。非常感谢vkp,这两个示例都有效。你能解释一下或者指出我可以在哪里读到更多关于这一部分的内容吗?并且不存在从事件表e2中选择1,其中e1.organizer\u id=e2.organizer\u id和e2.event\u paid\u type='free event'谢谢!
select count(*)
from event_table
group by organizer_id
having count(case when event_paid_type='free event' then 1 end) = 0
and count(case when event_paid_type='paid event' then 1 end) > 0