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

标签 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,它们的总和不同。

感谢任何帮助!

最佳答案

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。我想这现在有效只是因为测试数据库中的记录很少,只有 1 名员工参与。您需要总结每个人的时间吗?还是只是按日期?

关于MySQL 选择具有 sum(criteria1) <> sum(criteria2) 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37596412/

相关文章:

php - 带有 ios instagram 登录的 https PHP/MySql 网络服务

Java SpringMVC访问MySQL数据库的方法

mysql - 在mysql查询中选择十进制 float

PHP WHERE 子句中的许多变量 MySQL

php - 在 PHP 中将对象转换为字符串

mysql - 删除给出空响应的请求 Express 框架与 Mysql

php - 如何使用一个 foreach 从索引数组文本输入名称 PHP 将数据插入多列数据库?

mysql - 如何在mysql存储过程中声明变量?

php - 显示来自 mysql 查询的部分结果

php mysql数据只显示一行与foreach循环