SELECT dev_name, COUNT(dev_name) AS 设备总数 COUNT( CASE WHEN device_status LIKE '%1%' THEN 1 ELSE NULL END ) AS 在线设备, COUNT( CASE WHEN device_status LIKE '%2%' THEN 1 ELSE NULL END ) AS 离线设备 FROM `unify_data_parking`.`dwd_parking_device` GROUP BY dev_name HAVING COUNT(dev_name)>1
时间: 2024-02-24 20:55:20 浏览: 113
这是一个SQL查询语句,目的是查询 `dwd_parking_device` 表中每个设备名称(dev_name)下在线设备和离线设备的数量,以及该设备名称下的设备总数,同时只返回设备总数大于1的分组结果。
具体的查询语句如下:
```
SELECT dev_name,
COUNT(dev_name) AS 设备总数,
COUNT(CASE WHEN device_status LIKE '%1%' THEN 1 ELSE NULL END) AS 在线设备,
COUNT(CASE WHEN device_status LIKE '%2%' THEN 1 ELSE NULL END) AS 离线设备
FROM `unify_data_parking`.`dwd_parking_device`
GROUP BY dev_name
HAVING COUNT(dev_name) > 1;
```
这里使用了 `COUNT` 函数和 `CASE WHEN` 语句,来计算在线设备和离线设备的数量以及设备总数。`CASE WHEN` 语句用于判断设备状态是否为1或2,如果是,则返回1,否则返回NULL。`COUNT` 函数会忽略NULL值,只计算非空值的数量,因此可以统计在线设备和离线设备的数量。最后使用 `GROUP BY` 子句来按照设备名称进行分组,并使用 `HAVING` 子句只返回设备总数大于1的结果。
相关问题
SELECT dev_name,count(SELECT * FROM `unify_data_parking`.`dwd_parking_device` WHERE `device_status` LIKE '%1%') AS 在线设备,count(SELECT * FROM `unify_data_parking`.`dwd_parking_device` WHERE `device_status` LIKE '%2%') AS 离线设备 fROM `unify_data_parking`.`dwd_parking_device` GROUP BY dev_name
这是一个 SQL 查询语句,目的是查询 `dwd_parking_device` 表中每个设备名称(dev_name)下在线设备和离线设备的数量。其中,设备状态为1表示在线,状态为2表示离线。
具体的查询语句如下:
```
SELECT dev_name,
COUNT(CASE WHEN device_status LIKE '%1%' THEN 1 ELSE NULL END) AS 在线设备,
COUNT(CASE WHEN device_status LIKE '%2%' THEN 1 ELSE NULL END) AS 离线设备
FROM `unify_data_parking`.`dwd_parking_device`
GROUP BY dev_name
```
这里使用了 `COUNT` 函数和 `CASE WHEN` 语句,来计算在线设备和离线设备的数量。`CASE WHEN` 语句用于判断设备状态是否为1或2,如果是,则返回1,否则返回NULL。`COUNT` 函数会忽略NULL值,只计算非空值的数量,因此可以统计在线设备和离线设备的数量。最后使用 `GROUP BY` 子句来按照设备名称进行分组。
在dwd_light_device_run 表中的字段有 dev_id,status。在dwd_light_device表中的字段有id,dev_name。 其中dev_id对应着dwd_light_device表中的id,status的值为1或0。 现在需要查找dev_name的总数,status为1时的数量和status为0时的数量。请问这段MySQL语句如何编写
可以使用以下MySQL语句实现:
```
SELECT
COUNT(dwd_light_device.dev_name) AS total,
SUM(CASE WHEN dwd_light_device_run.status = 1 THEN 1 ELSE 0 END) AS status_1_count,
SUM(CASE WHEN dwd_light_device_run.status = 0 THEN 1 ELSE 0 END) AS status_0_count
FROM
dwd_light_device
INNER JOIN dwd_light_device_run ON dwd_light_device.id = dwd_light_device_run.dev_id;
```
这条语句使用了INNER JOIN将两个表连接在一起,然后使用SUM和CASE语句来计算status为1和0时的数量,最终使用COUNT函数计算dev_name的总数。
阅读全文