求助:查询2005年各国男女演员最高参演次数的SQL语句
正确SQL写法方案
方案一:使用窗口函数(推荐,支持MySQL 8.0+、PostgreSQL、SQL Server等)
利用窗口函数ROW_NUMBER()按国家、性别分组排序,直接筛选每组count最高的记录:
SELECT nationality, gender, year, actor, count FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY nationality, gender ORDER BY count DESC ) AS rn FROM movie.actor WHERE year = 2005 ) AS ranked WHERE rn = 1 ORDER BY count ASC;
核心逻辑:
PARTITION BY nationality, gender:将数据按「国家+性别」拆分为独立分组ORDER BY count DESC:每组内按count从高到低排序,count最高的记录会被标记为rn=1- 外层筛选
rn=1得到目标记录,最后按count升序排列
方案二:兼容低版本MySQL(无窗口函数支持)
若使用MySQL 5.x等不支持窗口函数的版本,可通过关联子查询实现:
SELECT a.nationality, a.gender, a.year, a.actor, a.count FROM movie.actor a WHERE a.year = 2005 AND a.count = ( SELECT MAX(count) FROM movie.actor b WHERE b.nationality = a.nationality AND b.gender = a.gender AND b.year = 2005 ) ORDER BY a.count ASC;
核心逻辑:
- 子查询先算出每个「国家+性别」分组在2005年的最大count值
- 外层查询匹配对应分组、年份且count等于最大值的记录
- 注:若同一分组内有多个演员count同为最大值,此方案会返回所有符合条件的记录;如需仅返回一条,可结合
LIMIT 1调整分组查询逻辑
额外注意
- 若
year字段为字符串类型,需将条件改为year = '2005' - 若存在
NULL值,可按需添加IS NOT NULL筛选(如WHERE year = 2005 AND nationality IS NOT NULL AND gender IS NOT NULL)
内容的提问来源于stack exchange,提问作者user20387029
相关产品推荐
相关产品推荐

