SQL实现:多行列值重复时仅返回对应单条数据
实现每个SITE仅返回一条记录的SQL修改方案
原查询会返回包含重复SITE的所有记录,要实现每个SITE仅保留一条记录(示例中取每组的第一条),可根据使用的数据库类型选择以下方案:
通用窗口函数方案(适用于PostgreSQL、SQL Server、MySQL 8.0+等支持窗口函数的数据库)
使用ROW_NUMBER()窗口函数按SITE分组,筛选出每组的第一条记录:
SELECT userid, locationid, site FROM ( SELECT userid, locationid, site, -- 按SITE分组,每组内按userid排序并编号 ROW_NUMBER() OVER (PARTITION BY site ORDER BY userid) AS rn FROM mytable ) t WHERE rn = 1 ORDER BY site;
如果不需要指定每组内的排序规则,可去掉ORDER BY userid,数据库会按默认顺序取每组的第一条记录。
MySQL 兼容方案(适用于低版本MySQL)
若你的MySQL版本不支持窗口函数,可使用GROUP BY结合聚合函数实现:
-- 取每组SITE中userid最小的那条记录 SELECT MIN(userid) AS userid, MIN(locationid) AS locationid, site FROM mytable GROUP BY site ORDER BY site;
若允许取每组任意一条记录,也可直接用GROUP BY site(注意需关闭ONLY_FULL_GROUP_BY模式,或确保数据库兼容该写法):
SELECT userid, locationid, site FROM mytable GROUP BY site ORDER BY site;
内容的提问来源于stack exchange,提问作者marshmallow
相关产品推荐
相关产品推荐

