如何统计年度内已投放种苗的水库数量(SQL求助)
统计当年有种苗投放记录的水库数量的正确SQL方法
核心需求解析
你需要的是2022年存在种苗投放记录的水库总数,而非各水库的投放次数,因此重点是获取唯一的水库编码集合后统计数量。
方法一:最简写法(使用COUNT(DISTINCT))
直接通过DISTINCT关键字对水库编码去重,再统计总数:
SELECT COUNT(DISTINCT reservoir_code) AS stocked_reservoir_count FROM reservoir_stocking WHERE stock_date BETWEEN '2022-01-01' AND '2022-12-31';
这个语句会先筛选2022年的所有投放记录,对reservoir_code去重后统计数量,直接得到目标结果。
方法二:子查询分组统计
如果偏好子查询的方式,修正你之前的错误写法即可:
SELECT COUNT(*) AS stocked_reservoir_count FROM ( -- 子查询获取2022年有投放记录的所有唯一水库编码 SELECT reservoir_code FROM reservoir_stocking WHERE stock_date BETWEEN '2022-01-01' AND '2022-12-31' GROUP BY reservoir_code ) AS unique_reservoirs;
子查询通过分组得到每个有投放记录的水库编码(仅出现一次),外层查询统计该结果集的行数,即为目标数量。
你之前语句的错误点
你第二次尝试的语句存在三个问题:
GROUP BY reservoir_stocking语法错误:GROUP BY后应跟字段名(如reservoir_code),而非表名;HAVING count > 1逻辑错误:会过滤掉仅投放过一次的水库,不符合统计所有有记录水库的需求;- 外层
COUNT(id)无意义:子查询中未返回id字段,应改为COUNT(*)统计子查询结果的行数。
内容的提问来源于stack exchange,提问作者DusanthaM
相关产品推荐
相关产品推荐

