You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除重复行?使用DISTINCT后pays列仍存重复的问题求助

问题分析与解决

你的问题核心出在GROUP BY的逻辑设计以及对DISTINCT作用的误解上:

  • DISTINCT在这里完全无效,因为GROUP BY已经按nom完成了分组,结果集里的每一行都是一个nom的聚合结果,DISTINCT是对整行的三列组合去重,无法单独实现pays列的去重。
  • 执行结果中pays出现重复,分两种情况:
    1. 不同导演(不同nom)来自同一个国家——这是正常数据现象,无需处理;
    2. 同一个nom对应多个不同国家的导演——你只按nom分组,数据库会随机返回该nom下某一个人的pays,同时错误合并了他们的影片计数。

对应解决方案

情况2修正(同名不同国家导演不被合并)

修改GROUP BY子句,将pays也加入分组,确保每个分组对应唯一的导演(名字+国家):

SELECT pays, nom, COUNT(titre) 
FROM film 
JOIN personne ON film.idRealisateur = personne.id 
GROUP BY pays, nom 
ORDER BY COUNT(titre) DESC 
LIMIT 10

需求为「每个国家仅显示影片最多的导演」

如果你的目标是让结果中pays无重复(即每个国家只保留影片数量最多的导演),需要用窗口函数实现:

WITH ranked_directors AS (
    SELECT 
        pays, 
        nom, 
        COUNT(titre) AS film_count,
        ROW_NUMBER() OVER (PARTITION BY pays ORDER BY COUNT(titre) DESC) AS rn
    FROM film 
    JOIN personne ON film.idRealisateur = personne.id 
    GROUP BY pays, nom
)
SELECT pays, nom, film_count
FROM ranked_directors
WHERE rn = 1
ORDER BY film_count DESC
LIMIT 10

内容的提问来源于stack exchange,提问作者Anteste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:10:26