mysql - 选择与具有特定值的其他行关联的行
问题描述
我有关于电话的事件形式的数据,看起来像:
|event_id|call_id|event_type |service|...
|--------|-------|----------------|-------|---
| 1| 1|Call Started |null |
| 2| 1|Recorded Message|null |
| 3| 1|Call at IVR |null |
| 4| 1|Agent Ringing |Sales |
| 5| 1|Agent Answers |Sales |
| 6| 2|Call Started |null |
| 7| 2|Recorded Message|null |
| 8| 2|Call at IVR |null |
| 9| 1|Disconnected |null |
| 10| 1|Call Ended |null |
| 11| 3|Call Started |null |
| 12| 3|Recorded Message|null |
| 13| 2|Agent Ringing |Support|
| 14| 3|Agent Ringing |Sales |
| 15| 2|Agent Answers |Support|
| 16| 3|Agent Answers |Sales |
| 17| 3|Call Hold |null |
| 18| 2|Disconnected |null |
| 19| 2|Call Ended |null |
| 20| 3|Call Retrieved |Sales |
| 21| 3|Disconnected |null |
| 22| 3|Call Ended |null |
我只想选择那些与调用Sales
. 如您所见,只有某些类型的事件在service
列中包含数据,这是我需要过滤的列。由于处理方式的不同,调用在它们包含的事件数量上也不一致。
我一直在通过加载所有事件然后使用GroupBy()
on过滤应用程序中的调用call_id
,最后通过选择任何具有service
equaling的事件来过滤这些组Sales
。
由于在实际数据中存在大量我不想要的调用,因此在数据库中过滤它会更有效。我该怎么做?
就像是
SELECT event_id
FROM events
GROUP BY call_id
HAVING (SELECT COUNT(*) FROM ***this_group*** WHERE service='Sales') > 0
预期的输出应该是
|event_id|
|--------|
| 1|
| 2|
| 3|
| 4|
| 5|
| 9|
| 10|
| 11|
| 12|
| 13|
| 16|
| 17|
| 20|
| 21|
| 22|
解决方案
- 在子查询中,确定
call_id
至少有一行包含service = 'SALES'
. - 只需在外部查询中使用此子查询结果来匹配
call_id
并获取所有event_id
值
方法 1:使用派生表
SELECT e1.event_id
FROM events AS e1
JOIN (SELECT DISTINCT e2.call_id
FROM events AS e2
WHERE e2.service = 'SALES') AS dt
ON dt.call_id = e1.call_id
方法 2:使用WHERE .. IN(..)
SELECT e2.event_id
FROM events AS e2
WHERE e2.call_id IN (SELECT DISTINCT e1.call_id
FROM events AS e1
WHERE e1.service = 'SALES')
推荐阅读
- python - 在 Heroku 上部署 Flask 并隐藏数据库密钥
- excel - 根据某个单元格中的文本值清除某些列中的某些单元格的代码
- python - 如何修复 AttributeError:“StringVar”对象没有属性“_name”
- c++ - 在 C++ 中读取二进制文件会返回意外值
- python - 习惯函数 Python 3.7
- javascript - 您如何将光标聚焦在位于 Bootstrap 模式中的 Quill 编辑器中?
- sql - 透视 SQL Server 表
- javascript - 如何使用 If () javascript 检查类是否被点击
- java - Android Studio com.google.wireless.android.sdk.stats.IntellijIndexingStats
- azure - Azure devops 构建推送映像到 aks