如何使用SQL基于广告名称列去重 为每个广告保留任意一个关联URL
SQL 广告名称去重保留对应URL方案
需求说明
现有数据表包含「广告名称(Ad name)」和「URL」两列,同一广告名称会对应多个短链URL变体,所有变体最终跳转目标地址一致,需要查询得到去重结果:每个广告名称仅保留唯一值,对应任意一个关联URL即可。
可用SQL写法
1. 全数据库通用写法(适配所有SQL引擎)
使用GROUP BY聚合函数直接取任意URL即可,MAX()/MIN()都可以使用,因为所有URL对应同一个目标,取任意一个都符合要求:
SELECT `Ad name` AS 广告名称, MAX(URL) AS 关联URL FROM 你的表名 GROUP BY `Ad name`;
说明:把上述SQL中的「你的表名」替换为你实际的数据表名称即可,也可以用
MIN(URL)替换MAX(URL),执行效果都是每个广告名称仅返回一条对应URL记录。
2. PostgreSQL/MySQL 8.0+/SQL Server 等支持窗口函数的数据库写法
如果后续有扩展需求(比如取最新生成的URL),可以用窗口函数实现,当前需求下写法如下:
WITH ranked_url AS ( SELECT `Ad name` AS 广告名称, URL AS 关联URL, ROW_NUMBER() OVER (PARTITION BY `Ad name` ORDER BY URL) AS rn FROM 你的表名 ) SELECT 广告名称, 关联URL FROM ranked_url WHERE rn = 1;
示例执行效果
| 广告名称 | 关联URL |
|---|---|
| ad name 1 | URL variant 1 |
| ad name 2 | URL variant 1 |
注:返回的URL是同广告名下的任意变体,完全符合需求要求。
内容的提问来源于stack exchange,提问作者Jing Cao
相关产品推荐
相关产品推荐

