SQL查询需求:找出含至少2位导演的流派并关联导演ID
完整SQL查询:筛选含至少2位导演的流派并聚合导演ID
原始表数据
director_id | genre d1 g1 d1 g2 d2 g2 d3 g1 d3 g2 d3 g3 d4 g3 d5 g1 d5 g3
需求
从director_genre表中筛选出至少有2位不同导演的流派,同时将每个流派对应的导演ID以逗号分隔的形式输出。
完整SQL语句(按数据库类型区分)
MySQL/MariaDB
SELECT genre, GROUP_CONCAT(DISTINCT director_id ORDER BY director_id SEPARATOR ',') AS director_id FROM director_genre GROUP BY genre HAVING COUNT(DISTINCT director_id) >= 2;
PostgreSQL/SQL Server
SELECT genre, STRING_AGG(DISTINCT director_id, ',' ORDER BY director_id) AS director_id FROM director_genre GROUP BY genre HAVING COUNT(DISTINCT director_id) >= 2;
Oracle
SELECT genre, LISTAGG(DISTINCT director_id, ',') WITHIN GROUP (ORDER BY director_id) AS director_id FROM director_genre GROUP BY genre HAVING COUNT(DISTINCT director_id) >= 2;
语句说明
- 字符串聚合函数(不同数据库对应不同函数):把同一流派下的导演ID拼接成逗号分隔的字符串,
DISTINCT避免同一导演ID重复出现,ORDER BY让ID按顺序排列。 GROUP BY genre:按流派分组,聚合每个流派的导演数据。HAVING COUNT(DISTINCT director_id) >=2:过滤掉只有1位导演的流派,只保留符合要求的流派。
执行结果
genre | director_id g1 d1,d3,d5 g2 d1,d2,d3 g3 d3,d4,d5
注:你提供的期望输出中g2仅显示d1,d3,属于笔误,根据原始数据g2包含d1、d2、d3三位导演,正确输出应包含d2。
内容的提问来源于stack exchange,提问作者Sahil Kamboj
相关产品推荐
相关产品推荐

