如何解决如何在 CASE 中只计算一次相同的行? SQL
我有包含 id、时间和事件(A 或 B)的表格。我需要编写一个案例(或其他条件),在表条目中找到 event='B' 并计算一次,按 id 分组。
例如, 对于 id 1:该表具有事件 B 的行,因此计数器 1。 对于 id 2:该表具有事件 B 的行,因此计数器 1。 对于 id 3:该表与事件 B 不一致,因此计数器 0。 对于 id 4:该表具有事件 B 的行,因此计数器 1。
然后计算百分比,在我的例子中它将是 (1+1+0+1)*100/4 = 75%
id | 日期时间 | 事件 |
---|---|---|
1 | 2021-04-01 15:00:00 | A |
1 | 2021-04-01 15:00:00 | B |
1 | 2021-04-01 15:00:00 | B |
2 | 2021-04-01 21:00:00 | A |
2 | 2021-04-05 21:00:00 | B |
3 | 2021-04-05 10:00:00 | A |
1 | 2021-04-07 15:00:00 | B |
4 | 2021-04-10 17:00:00 | A |
4 | 2021-04-11 17:00:00 | B |
4 | 2021-04-11 17:00:00 | B |
解决方法
试试这个:
SELECT
uniq(id) AS uniqEventCount,uniqIf(id,event = 'B') AS uniqBEventCount,(uniqBEventCount * 100) / uniqEventCount AS percentage
FROM (
/* emulate the test dataset */
SELECT data.1 AS id,data.2 AS DateTime,data.3 AS event
FROM (
SELECT arrayJoin([
(1,'2021-04-01 15:00:00','A'),(1,'B'),(2,'2021-04-01 21:00:00','2021-04-05 21:00:00',(3,'2021-04-05 10:00:00','2021-04-07 15:00:00',(4,'2021-04-10 17:00:00','2021-04-11 17:00:00','B')]) as data))
/*
┌─uniqEventCount─┬─uniqBEventCount─┬─percentage─┐
│ 4 │ 3 │ 75 │
└────────────────┴─────────────────┴────────────┘
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。