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

SQL查询问题:统计跨双类型导演数并去除重复类型对

解决无序电影类型对重复统计的问题

你的查询结果出现(a,b)和(b,a)这类重复的无序类型对,核心原因是筛选类型对的条件逻辑不对:你用了g2.genre_id <> g1.genre_id,这个条件会包含所有“类型A≠类型B”的双向组合——比如当g1取genre_id=1、g2取genre_id=2时会生成一条记录,当g1取genre_id=2、g2取genre_id=1时又会生成另一条记录,这两条记录本质是同一个无序类型对,却被统计了两次。

要只保留唯一的无序类型对,你只需要把类型对的筛选条件从“不等于”改成严格的大小比较,比如g2.genre_id > g1.genre_id(或者g1.genre_id > g2.genre_id,选其中一种规则即可)。这样就能确保每一对类型只会以固定的顺序出现一次,不会产生重复。

另外,我把你原来的逗号连接改成了显式JOIN语法,这样表之间的关联关系更清晰,可读性和可维护性更好:

SELECT 
    g1.genre_id AS genre1, 
    g2.genre_id AS genre2, 
    COUNT(DISTINCT mhd1.director_id) AS directors_count 
FROM genre g1
JOIN genre g2 ON g2.genre_id > g1.genre_id  -- 关键修改:用严格大于代替不等于,避免双向重复
JOIN movie_has_genre mhg1 ON mhg1.genre_id = g1.genre_id
JOIN movie_has_director mhd1 ON mhd1.movie_id = mhg1.movie_id
JOIN movie_has_genre mhg2 ON mhg2.genre_id = g2.genre_id
JOIN movie_has_director mhd2 ON mhd2.movie_id = mhg2.movie_id 
                            AND mhd2.director_id = mhd1.director_id
GROUP BY g1.genre_id, g2.genre_id;

这样修改后,每一对无序类型只会被统计一次,比如(1,2)会被保留,但(2,1)会被过滤掉,完全符合你想要的“唯一无序类型对”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:56:53