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

基于Sakila数据库,使用MySQL CASE语句按记录计数实现演员分级

调整后的MySQL查询语句

针对你的需求,修改后的查询会先预计算每个演员的参演电影数量,再通过区间判断生成等级,同时避免原查询的重复计算问题:

SELECT 
    a.*,
    fa_count.film_count,
    CASE
        WHEN fa_count.film_count BETWEEN 0 AND 20 THEN 'Newcomer'
        WHEN fa_count.film_count BETWEEN 21 AND 30 THEN 'Prolific Actor'
        WHEN fa_count.film_count > 30 THEN 'Hollywood Star'
    END AS actor_level
FROM sakila.actor a
JOIN (
    -- 预计算每个演员的参演电影总数
    SELECT actor_id, COUNT(*) AS film_count
    FROM sakila.film_actor
    GROUP BY actor_id
) fa_count ON a.actor_id = fa_count.actor_id

关键调整点:

  • 用子查询预统计参演数:原代码中每行都执行一次count(*)子查询,效率较低,这里通过GROUP BY只计算一次所有演员的参演数
  • 改用搜索式CASE:原代码的简单CASE只能匹配固定值,搜索式CASE支持区间判断,更适合你的分级规则
  • 修正区间逻辑:明确划分无重叠的区间(0-20、21-30、31+),避免原规则中30的重复匹配问题

可选扩展:

如果需要展示从未参演任何电影的演员(即film_actor中无记录的演员),可以将JOIN改为LEFT JOIN,此时这类演员的film_count会显示为NULL,可以在CASE中补充WHEN fa_count.film_count IS NULL THEN 'Newcomer'来统一处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:01:12