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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语句)
我写了一个最简单的,也就是在你的语句外面又套了一层,你可以试试能不能不套这一层,不过我没有环境没办法测试,所以就直接套了。
参考技术A 将这几个连接的表表示为表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本回答被提问者采纳
参考技术B select number,count(number) from database(database 是你的数据库)
group by number;追问

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

SqlServer如何查询表的列数

select count(name) from syscolumns
where id=( select id from sysobjects where name='表名' and xtype='U')
说明:select id from sysobjects where name='表名' and xtype='U' 从sysobjects 里查询表类型为U(非系统)的表的id ,假设查到的是 1002 ;
select count(name) from syscolumns where id=1002 查的是系统列syscolumns 里表id是1002的列数。
你可以随便建个表,然后分步运行这两句看看
参考技术A select count(*) from sysobjects a join syscolumns b
on a.id=b.id
where a.name='表名'本回答被提问者和网友采纳
参考技术B select a.name as tablename,COUNT(1) as columncount from sysobjects a join syscolumns b
on a.id=b.id
where a.type='u' group by a.name
参考技术C select o.name [表名称],c.name [列名称],* from sys.all_columns c left join sys.all_objects o on c.object_id=o.object_id
where o.type_desc like 'USER_TABLE'
参考技术D select count(*) from 数据表名称;

以上是关于SQL中如何统计查询结果中某一列重复值的个数?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用SQL语句查数据库中某一列是不是有重复项

SQL如何查询表中某一列中的数据的前几位

SqlServer如何查询表的列数

SQL如何查询出某一列中不同值出现的次数?

sql查询中有一列中有NULL的数据,如何判断不为空的时候才进行操作?

sql,表与表之间列的包含查询