繁体   English   中英

MySQL:基于另一列的值的一列的SUM

[英]MySQL: SUM of a column based on a value of another column

我想有一个列的总和,如果另一列的值是this / that,则该列为基础。 这是我的表结构

id  leave_hours leave_type overtime_hours employee_id
1     7.6          1           0               3
2      5           2           0               3
3      0           0           2.3             3

我已经有这个查询,但是我需要有一个列,该列仅在休假类型为1且休假类型为2时求和

SELECT employee_id, SUM(overtime_hours) AS ot_hrs, SUM(leave_hours if leave_type == 1) AS  
       leave_1, SUM(leave_hours if leave_type == 2) AS leave_2
FROM table
GROUP BY employee_id

结果应为:

employee_id  ot_hrs leave_1  leave_2
    3          2.3    7.6       5

感谢您的投入。

您需要使用条件汇总来分别汇总不同的leave_hours

SELECT employee_id, 
       SUM(overtime_hours) AS ot, 
       SUM(CASE WHEN leave_type = 1 THEN leave_hours ELSE 0 END) AS leave_1, 
       SUM(CASE WHEN leave_type = 2 THEN leave_hours ELSE 0 END) AS leave_2
FROM `table`
GROUP BY employee_id

输出:

employee_id ot      leave_1     leave_2
3           2.3     7.6         5

dbfiddle上的演示

请注意,如果使用浮点数存储小时,则可能需要对结果进行ROUND

您可以在以下情况下使用max()

SELECT employee_id, 
       max(overtime_hours) AS ot, 
       max(CASE WHEN leave_type = 1 THEN leave_hours  END) AS leave_1, 
       max(CASE WHEN leave_type = 2 THEN leave_hours END) AS leave_2
FROM  table_name
GROUP BY employee_id

产量

employee_id     ot     leave_1       leave_2
3              2.3  7.599999904632568   5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM