Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果事件\付费\类型='付费事件'忽略/如果事件\付费\类型='免费事件'不计算组织者\ id_Sql - Fatal编程技术网

Sql 如果事件\付费\类型='付费事件'忽略/如果事件\付费\类型='免费事件'不计算组织者\ 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

我有一个“组织者id”列,每个组织者可以举办许多活动,并且在“活动付费”列中,每个活动都是“免费活动”或“付费活动”

数据集示例:

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