HAVING 子句
2025年1月3日大约 2 分钟
HAVING 子句
1 语法概览
HAVING booleanExpression
1.1 HAVING 子句
用于在数据分组聚合(GROUP BY)完成后,对聚合结果进行筛选。
注意事项
- 就语法而言,
HAVING
子句与WHERE
子句相同,WHERE子句在分组聚合之前对数据进行过滤,HAVING子句是对分组聚合后的结果进行过滤。
2 示例数据
在示例数据页面中,包含了用于构建表结构和插入数据的SQL语句,下载并在IoTDB CLI中执行这些语句,即可将数据导入IoTDB,您可以使用这些数据来测试和执行示例中的SQL语句,并获得相应的结果。
示例 1:过滤计数低于特定值的设备
查询将计算 table1
表中每个 device_id
的条目数,并过滤掉那些计数低于 5 的设备。
SELECT device_id, COUNT(*)
FROM table1
GROUP BY device_id
HAVING COUNT(*) >= 5;
执行结果如下:
+---------+-----+
|device_id|_col1|
+---------+-----+
| 100| 8|
| 101| 10|
+---------+-----+
Total line number = 2
It costs 0.063s
示例 2:计算每个设备的每小时平均温度并过滤
查询将计算 table1
表中每个设备每小时的平均温度,并过滤掉那些平均温度低于 27.2 的设备。
SELECT date_bin(1h, time) as hour_time, device_id, AVG(temperature) as avg_temp
FROM table1
GROUP BY date_bin(1h, time), device_id
HAVING AVG(temperature) >= 85.0;
执行结果如下:
+-----------------------------+---------+--------+
| hour_time|device_id|avg_temp|
+-----------------------------+---------+--------+
|2024-11-29T18:00:00.000+08:00| 100| 90.0|
|2024-11-28T08:00:00.000+08:00| 100| 85.0|
|2024-11-28T10:00:00.000+08:00| 100| 85.0|
|2024-11-28T11:00:00.000+08:00| 100| 88.0|
|2024-11-26T13:00:00.000+08:00| 100| 90.0|
|2024-11-30T09:00:00.000+08:00| 101| 90.0|
|2024-11-30T14:00:00.000+08:00| 101| 90.0|
|2024-11-29T10:00:00.000+08:00| 101| 85.0|
|2024-11-27T16:00:00.000+08:00| 101| 85.0|
+-----------------------------+---------+--------+
Total line number = 9
It costs 0.079s