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

MySQL作业求助:筛选有2次及以上40美元+罚款的球员

解决MySQL作业题:筛选有2次及以上高额罚款的球员

你的现有代码存在两处核心问题:

  • WHERE amount > 40 IN (...) 语法逻辑错误:这个写法将amount > 40的布尔结果与子查询返回的球员ID做匹配,完全偏离了需求逻辑。
  • 子查询中的COUNT(DISTINCT playerno)无效:按playerno分组后,每个分组内的球员ID唯一,统计结果始终为1,HAVING COUNT(...) > 1的条件无法起到筛选作用。

正确实现思路

要满足需求,需先统计每个球员金额超过40美元的罚款次数,筛选出次数≥2的球员,再获取其姓名及首字母(假设存在存储球员信息的players表)。以下是符合「子查询+聚合函数」要求的解法:

-- 关联players表获取姓名和首字母
SELECT 
    p.playerno,
    p.name,
    LEFT(p.name, 1) AS initial  -- 提取姓名首字母
FROM players p
WHERE p.playerno IN (
    -- 子查询:筛选出有2次及以上金额超40美元罚款的球员ID
    SELECT playerno
    FROM penalties
    WHERE amount > 40  -- 先过滤出高额罚款记录
    GROUP BY playerno
    HAVING COUNT(*) >= 2  -- 统计该球员的高额罚款次数≥2
);

如果仅需获取符合条件的球员ID,可简化为:

SELECT playerno
FROM penalties
WHERE amount > 40
GROUP BY playerno
HAVING COUNT(*) >= 2;

数据验证

基于你提供的penalties表数据:

  • 球员6:1次高额罚款
  • 球员44:1次高额罚款
  • 球员27:2次高额罚款(100.00、75.00)
  • 球员104:1次高额罚款
  • 球员8:0次高额罚款

执行上述代码后,只会返回球员27,与预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:07:39