sql - SQL:计算列 = 值且另一列与第一个条件为真的组中的值相同的行?
问题描述
我需要计算每个员工的行数,其中status = 9
和 与中的date
其他行相同。我还想要and ,每个员工的所有行的计数。employee_id
status = 9
employee_id
count_all
弄清楚如何获得count_same_date_status_9
专栏是我卡住的地方。这些日期仅用于示例,因此我不想将它们明确地放入查询中。
我的桌子:
employee_id status date
1 9 10/19/2020
1 7 07/16/2001
1 9 10/19/2020
2 5 08/11/2011
2 9 12/25/2012
2 9 11/19/2013
3 5 06/05/2016
3 4 01/01/2021
4 9 02/15/2018
4 9 02/15/2018
4 9 02/15/2018
我想返回以下内容:
employee_id count_same_date_status_9 count_all
1 2 3
2 0 3
3 0 2
4 3 3
解决方案
您可以使用:
SELECT employee_id,
MAX( CASE WHEN status = 9 AND cnt > 1 THEN cnt ELSE 0 END ) AS count_9,
SUM( cnt ) AS count_all
FROM (
SELECT employee_id,
status,
dt,
COUNT(*) AS cnt
FROM table_name
GROUP BY employee_id, status, dt
)
GROUP BY employee_id
ORDER BY employee_id;
其中,对于您的示例数据:
CREATE TABLE table_name ( employee_id, status, dt ) AS
SELECT 1, 9, DATE '2020-10-19' FROM DUAL UNION ALL
SELECT 1, 7, DATE '2001-07-16' FROM DUAL UNION ALL
SELECT 1, 9, DATE '2020-10-19' FROM DUAL UNION ALL
SELECT 2, 5, DATE '2011-08-11' FROM DUAL UNION ALL
SELECT 2, 9, DATE '2012-12-25' FROM DUAL UNION ALL
SELECT 2, 9, DATE '2013-11-19' FROM DUAL UNION ALL
SELECT 3, 5, DATE '2016-06-05' FROM DUAL UNION ALL
SELECT 3, 4, DATE '2021-01-01' FROM DUAL UNION ALL
SELECT 4, 9, DATE '2018-02-15' FROM DUAL UNION ALL
SELECT 4, 9, DATE '2018-02-15' FROM DUAL UNION ALL
SELECT 4, 9, DATE '2018-02-15' FROM DUAL;
输出:
员工 ID | COUNT_9 | COUNT_ALL ----------: | ------: | --------: 1 | 2 | 3 2 | 0 | 3 3 | 0 | 2 4 | 3 | 3
db<>在这里摆弄
推荐阅读
- flutter - 两个包在颤振中使用两个不同的 compileSdkVersion
- python - matplotlib 中使用函数 z = f(x,y) 绘制曲面图,其中 f 不能用标准函数编写。如何?
- github - 如何在所有组织存储库中使用 GitHub 操作工作流?
- javascript - 如何将输入值推送到本地存储的数组中?
- java - 不能在 Java 中使用协程......但是插入 Kotlin 协程呢?
- javascript - 如何获取由属性标识的表格行的位置
- node.js - 当由公共 IP 地址触发时,来自 nodejs express 服务器的本地 http 请求被 CORS 阻止
- c - 如何仅将结构矩阵中的元素移动一次?
- node.js - 解码 LoRaWAN 数据包(加入接受)
- c - 获取 zsh:arm64 Visual Studio 代码中的分段错误