SQL中如何统计查询结果中某一列重复值的个数?

SQL中如何统计查询结果中某一列重复值的个数?
各位大神好,麻烦请教一下下面的查询语句,能不能在查询结果中添加一列,显示出第一列的查询结果中每个值出现了多少次?
强调一下,并不是我实际的某张表里有多少个重复值,我是想统计出来我查询结果的第一列中每个值的出现的次数。

SELECT md.fsu_device_id,md.device_id,de.device_name,mm.model_name,ml.mete_code,ml.mete_name
FROM t_cfg_monitordevice md
INNER JOIN t_cfg_device de
ON md.device_id=de.device_id
INNER JOIN t_cfg_metemodel mm
ON de.device_model=mm.model_id
INNER JOIN t_cfg_metemodel_detail ml
ON mm.model_id=ml.model_id
ORDER BY md.fsu_device_id ASC

数据库开窗函数count()over()可以实现你的需求,但是你的数据库有没有类似的开窗函数我就不知道的,一般来说oracle应该可以实现,sqlserver和mysql中mysql没有响应的开窗函数,要自己做,sqlserver中有类似的聚合开窗函数,但是count能不能用我不是很确定。
select count(*)over(partition by fsu_device_id) 重复次数,你的字段 from (你上面的select语句)
我写了一个最简单的,也就是在你的语句外面又套了一层,你可以试试能不能不套这一层,不过我没有环境没办法测试,所以就直接套了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-05
将这几个连接的表表示为表a,再写一个表b,与表a一样,查出fsu_device_id以及出现的次数,然后a与b连接,a表左连接b表,查出最终结果
大体思路就是这样,以下SQL我没有验证,如果有执行错误,自己稍作修改即可
SELECT a.fsu_device_id,b.times,a.device_id,a.device_name,a.model_name,a.mete_code,a.mete_name
FROM
(SELECT md.fsu_device_id,md.device_id,de.device_name,mm.model_name,ml.mete_code,ml.mete_name
FROM t_cfg_monitordevice md
INNER JOIN t_cfg_device de
ON md.device_id=de.device_id
INNER JOIN t_cfg_metemodel mm
ON de.device_model=mm.model_id
INNER JOIN t_cfg_metemodel_detail ml
ON mm.model_id=ml.model_id) a
left join
(SELECT md.fsu_device_id, count(*) times
FROM t_cfg_monitordevice md
INNER JOIN t_cfg_device de
ON md.device_id=de.device_id
INNER JOIN t_cfg_metemodel mm
ON de.device_model=mm.model_id
INNER JOIN t_cfg_metemodel_detail ml
ON mm.model_id=ml.model_id
group by md.fsu_device_id) b
on a.fsu_device_id = b.fsu_device_id
ORDER BY a.fsu_device_id ASC本回答被提问者采纳
第2个回答  2019-09-05
select number,count(number) from database(database 是你的数据库)
group by number;追问

您好,我的意思是说我想要知道我目前这个语句的查询结果中,第一列的每个值各出现了多少次,并不是说我具体的某张表里有重复值。