You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中COUNT函数统计结果不准确问题求助

问题分析:SQL统计结果与实际数据不符的原因及解决办法

我写了两条SQL查询语句:第一条筛选日期及对应的attribute_value,下载数据后发现2022年12月7日对应12条值;但第二条用COUNT(attribute_value)统计该日期的数量时,结果显示为139而非12。请问哪里操作有误?

两条SQL语句如下:

SELECT
  DATE(b.block_timestamp) AS timestamp,
  attribute_value
FROM `immaculate-355716.stride_1.event_attributes` ea
INNER JOIN `immaculate-355716.stride_1.blocks` b
ON CAST(ea.block_height AS STRING) = b.block_height
WHERE ea.attribute_key = 'packet_src_port'
AND ea.attribute_value LIKE 'icacontroller%'
GROUP BY 1,2
ORDER BY 1 DESC
SELECT
  DATE(b.block_timestamp) AS timestamp,
  COUNT(attribute_value) AS count
FROM `immaculate-355716.stride_1.event_attributes` ea
INNER JOIN `immaculate-355716.stride_1.blocks` b
ON CAST(ea.block_height AS STRING) = b.block_height
WHERE ea.attribute_key = 'packet_src_port'
AND ea.attribute_value LIKE 'icacontroller%'
GROUP BY 1
ORDER BY 1 DESC

核心问题原因

  • 第一条SQL通过GROUP BY 1,2(按日期和attribute_value分组),返回的是去重后的日期+属性值组合,2022-12-07的12条是当天不同attribute_value的数量,而非原始数据的总条数。
  • 第二条SQL仅按日期分组,COUNT(attribute_value)统计的是所有符合条件的原始记录总数(未去重),所以139是当天满足筛选条件的全部原始数据量,和第一条的去重结果自然存在差异。

修正方案

根据你的需求选择对应调整:

  1. 若要统计去重后的attribute_value数量(和第一条记录数匹配),将第二条SQL的COUNT(attribute_value)改为COUNT(DISTINCT attribute_value):
SELECT
  DATE(b.block_timestamp) AS timestamp,
  COUNT(DISTINCT attribute_value) AS count
FROM `immaculate-355716.stride_1.event_attributes` ea
INNER JOIN `immaculate-355716.stride_1.blocks` b
ON CAST(ea.block_height AS STRING) = b.block_height
WHERE ea.attribute_key = 'packet_src_port'
AND ea.attribute_value LIKE 'icacontroller%'
GROUP BY 1
ORDER BY 1 DESC
  1. 若第一条SQL原本想获取所有原始数据而非去重结果,直接去掉第一条SQL中的GROUP BY 1,2,此时下载的原始数据条数会和第二条的COUNT(attribute_value)结果一致。

内容的提问来源于stack exchange,提问作者Adi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:10:34