mysql - Mysql 计算 Sum(if()) 中的不同 ID
问题描述
我有下表。
案子
ID | 姓名 |
---|---|
1 | 安东 |
2 | 埃尔弗里德 |
3 | 欧司朗 |
约会
ID | 期间 | 案子 |
---|---|---|
1 | 70 | 1 |
2 | 70 | 2 |
没有预约的 Fastdocu
ID | 期间 | 案子 |
---|---|---|
1 | 15 | 2 |
2 | 15 | 2 |
3 | 50 | 3 |
3 | 8 | 3 |
我需要总结所有持续时间和所有约会以及不在约会中的案例。
结果应该是
时长 88
预约 3
案例 1
以下我写的声明
Select sum(duration), count(DISTINCT ID), SUM(IF(`Case` NOT IN (1,2),1,0)) From Fastdocu
结果一下子就出来了
时长 88
预约 3
案例 2
我必须在案例计数中仅对不同的 id 求和。但是 if 中似乎禁止了 distinct 。我怎样才能正确计算案件?
解决方案
COUNT()
与表达式一起使用,CASE
而不是SUM()
:
SELECT SUM(duration) total_duration,
COUNT(DISTINCT ID) distinct_ids,
COUNT(DISTINCT CASE WHEN `Case` NOT IN (1,2) THEN `Case` END) cases_not_in_Appointments
FROM Fastdocu
由于COUNT()
没有ELSE
分支,它不会计算Case
不满足条件的 s,Case NOT IN (1,2)
因为在这种情况下,CASE
表达式的结果将是NULL
。
如果要计算 distinct id
s 而不是 distinct Case
s 更改为:
COUNT(DISTINCT CASE WHEN `Case` NOT IN (1,2) THEN ID END)
请参阅演示。
结果:
总持续时间 distinct_ids case_not_in_Appointments 88 3 1
推荐阅读
- ruby-on-rails - 如何在 Bootstrap 模式中渲染 Wicked PDF
- r - ggplot2对图例的交叉影响
- ios - 减少 Core Data 中的关系数量
- python - Python分析和改变数据值
- javascript - 使用模块模式 javascript 调用独立文件类(已编辑)
- c# - AttachedProperty 与在 ViewModel 中获取 SelectedItems 的行为
- python - 将矩阵与枚举相乘
- linux - genymotion 抛出 libssl_conf.so:无法打开共享对象文件:没有这样的文件或目录
- debugging - 需要帮助调试汇编程序无限循环
- python-3.x - 在 Firestore 中创建时指定数字字段值?