MySQL选择具有sum(criteria1)<>的行总和(criteria2)

时间:2016-06-02 15:41:24

标签: mysql

我确定答案已经出现在某处,但找不到......

一个表存储员工的记录小时数,按类型分类(类型=项目或任务)。 对于每一天,我可以有几个小时登录多个任务。

通过简单的总和和分组,我可以得到每种类型和每天的总小时数,但我想更进一步: 仅显示“错误案例”,其中每个项目的总和(小时)不同于给定日期的所有任务的总和(小时)。

mysql> select sum(logged), type, date from `hoursLog` group by idEmployee, date, type;
+-------------+----------+----------+
| sum(logged) | type     | date     |
+-------------+----------+----------+
|     0.8     | Project  | 20160525 |
|     1.0     | Task     | 20160525 |
|     0.3     | Project  | 20160526 |
|     0.3     | Task     | 20160526 |
|     0.3     | Project  | 20160527 |
|     0.5     | Task     | 20160527 |
+-------------+----------+----------+

从上表中,我只想要20160525和20160527的日期,总和不同。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

SELECT
 SUM(IF(`type`='Task',logged,0)) task_hours,
 SUM(IF(`type`='Project',logged,0)) project_hours,
 date 
FROM `hoursLog` 
GROUP by idEmployee, date
HAVING task_hours <> project_hours

但我不确定你是否真的需要GROUP BY idEmployee。我想现在这样做只是因为你在测试数据库中只有很少的记录而只涉及一名员工。你需要每个人总结时间吗?或只是按日期?