SQL Server统计plate表中plate重复与非重复占比的实现方法
实现车牌出现次数占比统计的SQL方案
要统计仅出现一次的车牌占比和出现多次的车牌占比,你可以通过分层统计来实现,以下是具体的SQL语句和说明:
简洁版查询语句
SELECT CASE WHEN cnt = 1 THEN '仅出现一次' ELSE '出现多次' END AS 类别, CONCAT(ROUND(COUNT(*) * 100.0 / (SELECT COUNT(DISTINCT plate) FROM dbo.plate), 2), '%') AS 占比 FROM ( -- 先统计每个车牌的出现次数 SELECT plate, COUNT(*) AS cnt FROM dbo.plate GROUP BY plate ) t -- 按出现次数分类统计 GROUP BY CASE WHEN cnt = 1 THEN '仅出现一次' ELSE '出现多次' END;
分步解释
- 内层子查询:对
plate字段分组,统计每个车牌的出现次数,得到每个车牌的频次数据。 - 分类统计:通过
CASE语句将车牌分为"仅出现一次"和"出现多次"两类,统计每类的车牌数量。 - 计算占比:用每类的车牌数量除以唯一车牌的总数(通过
SELECT COUNT(DISTINCT plate)获取),乘以100后保留两位小数,拼接百分号得到占比结果。
原有语句的问题说明
你之前写的语句只能统计出现多次的车牌数量,但没有计算占比,也未覆盖"仅出现一次"的统计场景,因此无法得到所需的百分比结果。
内容的提问来源于stack exchange,提问作者Georg Huber
相关产品推荐
相关产品推荐

