Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 简化SQL语句_Mysql_Sql - Fatal编程技术网

Mysql 简化SQL语句

Mysql 简化SQL语句,mysql,sql,Mysql,Sql,以下是表event_temperature,记录是员工在特定时间的温度记录: event_id, dept_name, event_card, temp, event_time 9394cf697afa11ea9562040e3c15002f, BU003, F9011101, 36.7000, 2020-04-08 06:50:01 9394cecc7afa11ea9562040e3c15002f, BU003, F9011101, 37.2000, 2020-04-11 07:50:17

以下是表event_temperature,记录是员工在特定时间的温度记录:

event_id, dept_name, event_card, temp, event_time

9394cf697afa11ea9562040e3c15002f, BU003, F9011101, 36.7000, 2020-04-08 06:50:01
9394cecc7afa11ea9562040e3c15002f, BU003, F9011101, 37.2000, 2020-04-11 07:50:17
907ebe3f7afa11ea9562040e3c15002f, BU003, W4204094, 40.3000, 2020-04-10 08:35:45
8fdf42a07afa11ea9562040e3c15002f, BU007, F1644194, 36.1600, 2020-04-07 19:58:08
8e9bb6fd7afa11ea9562040e3c15002f, BU003, F2150829, 35.8000, 2020-04-11 12:45:23
现在,我想得到今天每个部门这3类员工的数量:

总计:所有温度 异常:温度在37.3和42之间 可疑:温度在36.5和37.3之间 我已经编写了此SQL,但它看起来很复杂:

选择 ee1.部门名称,ee1.总计,ee2.异常,ee3.可疑 从…起 选择 ee.dept_name,将不同的ee.event_卡计为总计 从…起 选择不同的 et.部门名称, 事件卡, 案例 当et.temp在36.5和37.3之间时,则“可疑” 当et.temp在37.3和42之间时,则为“异常” 否则“正常” 以类型结尾_ 从…起 `whsgdb开发事件温度et 哪里 东部时间“2020-04-11 00:00:00”和“2020-04-11 23:59:59”之间的事件时间 按ee.dept\u名称分组ee1 左连接 选择 ee.dept\u name、COUNTDISTINCT ee.event\u卡异常 从…起 选择不同的 et.部门名称, 事件卡, 案例 当et.temp在36.5和37.3之间时,则“可疑” 当et.temp在37.3和42之间时,则为“异常” 否则“正常” 以类型结尾_ 从…起 `whsgdb开发事件温度et 哪里 东部时间“2020-04-11 00:00:00”和“2020-04-11 23:59:59”之间的事件时间 哪里 ee.type u=‘异常’ 按ee.dept\u名称ee2对ee2进行分组。dept\u名称=ee1.dept\u名称 左连接 选择 ee.dept\u name,COUNTDISTINCT ee.event\u卡作为嫌疑犯 从…起 选择不同的 et.部门名称, 事件卡, 案例 当et.temp在36.5和37.3之间时,则“可疑” 当et.temp在37.3和42之间时,则为“异常” 否则“正常” 以类型结尾_ 从…起 `whsgdb开发事件温度et 哪里 东部时间“2020-04-11 00:00:00”和“2020-04-11 23:59:59”之间的事件时间 哪里 ee.type u=‘可疑’ 按ee.dept\u名称ee3在ee3上分组。dept\u名称=ee1.dept\u名称 结果:

dept_name, total, abnormal, suspect

BU003, 3227, null, 6
BU007, 247, null, 2
BU011, 16, null, 1

请帮助我简化sql语句,或者有更简单的方法吗?

使用条件聚合:

SELECT
    dept_name,
    COUNT(DISTINCT event_card) AS total,
    COUNT(DISTINCT CASE WHEN temp BETWEEN 37.3 AND 42   THEN event_card END) AS abnormal,
    COUNT(DISTINCT CASE WHEN temp BETWEEN 36.5 AND 37.3 THEN event_card END) AS suspect
FROM event_temperature
WHERE
    event_time >= CURDATE() && event_time < (CURDATE() + INTERVAL 1 DAY)
GROUP BY
    dept_name
ORDER BY
    dept_name;

使用条件聚合:

SELECT
    dept_name,
    COUNT(DISTINCT event_card) AS total,
    COUNT(DISTINCT CASE WHEN temp BETWEEN 37.3 AND 42   THEN event_card END) AS abnormal,
    COUNT(DISTINCT CASE WHEN temp BETWEEN 36.5 AND 37.3 THEN event_card END) AS suspect
FROM event_temperature
WHERE
    event_time >= CURDATE() && event_time < (CURDATE() + INTERVAL 1 DAY)
GROUP BY
    dept_name
ORDER BY
    dept_name;

每个员工可能有多个记录,在哪里添加差异当你应该计算不同的事件卡时,请查看更新的答案。谢谢,这太棒了,它可以工作。您忘记从事件中写入:每个员工可能有多个记录,在哪里添加差异当您应该计算不同的事件卡时,请查看更新的答案。谢谢,这太棒了,它很有效。您忘记从事件中写入: