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

如何在SQL中从子查询取最大值,统计SibSp≥1的男女乘客数取最大值

SQL查询优化方案

原代码问题

你现有的SQL存在逻辑错误:WHERE子句的作用是过滤行记录,不能直接接收返回多列多行的统计子查询作为过滤条件。你需要先将统计子查询的结果作为临时表(派生表/CTE),再基于临时表筛选最大值记录。

方案1:仅取单条最大值记录(无并列场景适用)

写法最简单,执行效率最高,直接在原有统计逻辑基础上调整即可:

SELECT Sex, total_passengers
FROM (
    SELECT Sex, COUNT(PassengerId) AS total_passengers
    FROM passenger
    WHERE SibSp >= 1 -- 此处SibSp>0和需求的SibSp≥1逻辑等价,可根据实际需要调整
    GROUP BY Sex
) AS gender_cnt
ORDER BY total_passengers DESC
LIMIT 1;

方案2:兼容并列最大值场景

如果存在男女乘客数量相等、同为最大值的情况,用窗口函数写法可以返回所有符合最大值的记录:

WITH gender_cnt AS (
    SELECT Sex, COUNT(PassengerId) AS total_passengers
    FROM passenger
    WHERE SibSp >= 1
    GROUP BY Sex
),
ranked_cnt AS (
    SELECT 
        Sex, 
        total_passengers,
        RANK() OVER (ORDER BY total_passengers DESC) AS cnt_rank
    FROM gender_cnt
)
SELECT Sex, total_passengers
FROM ranked_cnt
WHERE cnt_rank = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:36:04