CnosDB查询疑问:标签过滤是否自动去重?count(*)结果异常原因?
问题原因解析
首先明确:标签过滤不会自动对数据去重,你遇到的问题是CnosDB聚合查询的默认逻辑导致的:
- 执行
select * where 标签过滤条件时,数据库会返回所有符合标签条件的原始数据行,所以条目数量多。 - 执行
count(*) where 标签过滤条件时,因为没有指定GROUP BY,CnosDB会对所有符合条件的数据做全局聚合,最终只返回一行结果——这一行的count值就是符合条件的总数据条数,而不是返回多行结果。
举个实际场景:假设你有5000条符合标签过滤规则的数据,select *会输出5000行;count(*)只会输出1行,这行的数值是5000,而不是5000行各显示1。
如果需要按不同标签分组统计数量,得加上GROUP BY子句,比如:
count(*) from 你的表名 where 标签过滤条件 GROUP BY 标签字段名
这样就会返回每个标签对应的行数,结果行数会和你有多少种不同的标签值一致。
你可以对比count(*)返回的数值和select *的结果行数,应该是完全相等的,这就能确认是聚合逻辑的问题,和标签去重无关。
内容的提问来源于stack exchange,提问作者HighFive
相关产品推荐
相关产品推荐

