如何编写SQL查询提取表中index列值相同行的指定字段数据
SQL查询实现方案
需求说明
从业务表中筛选出index字段值重复出现(相同值出现次数≥2)的行,提取对应行的company、disease1、disease2、disease3四个字段内容。
实现语句
写法1:窗口函数实现(兼容MySQL 8.0+/PostgreSQL/SQL Server等主流新版本数据库)
注意index是SQL保留关键字,需要按你使用的数据库规则转义:
-- MySQL写法(保留字用反引号转义) SELECT company, disease1, disease2, disease3 FROM ( SELECT company, disease1, disease2, disease3, COUNT(*) OVER (PARTITION BY `index`) AS index_cnt FROM 你的业务表名 ) t WHERE index_cnt >= 2;
-- PostgreSQL写法(保留字用双引号转义) SELECT company, disease1, disease2, disease3 FROM ( SELECT company, disease1, disease2, disease3, COUNT(*) OVER (PARTITION BY "index") AS index_cnt FROM 你的业务表名 ) t WHERE index_cnt >= 2;
-- SQL Server写法(保留字用方括号转义) SELECT company, disease1, disease2, disease3 FROM ( SELECT company, disease1, disease2, disease3, COUNT(*) OVER (PARTITION BY [index]) AS index_cnt FROM 你的业务表名 ) t WHERE index_cnt >= 2;
写法2:子查询匹配实现(兼容所有数据库版本,包括低版本不支持窗口函数的场景)
-- 以MySQL为例,其他数据库修改index的转义符即可 SELECT company, disease1, disease2, disease3 FROM 你的业务表名 WHERE `index` IN ( SELECT `index` FROM 你的业务表名 GROUP BY `index` HAVING COUNT(*) >= 2 );
注意事项
- 请将代码中的
你的业务表名替换为你实际的表名 - 因为
index属于SQL标准保留关键字,必须加对应数据库的转义符包裹,否则会报语法错误
内容的提问来源于stack exchange,提问作者lillup
相关产品推荐
相关产品推荐

