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

求助:查询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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:24