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

SQL查询求助:统计每位乘客所在车厢的其他乘客数量

查询每位乘客所在车厢的其他乘客数量

首先修正你的数据插入语句(SQL字符串需用单引号包裹):

INSERT INTO passengers(id, name, cart_id)
VALUES (1, 'Uolevi', 1), (2,'Maija', 1), (3, 'Kaaleppi', 2), (4, 'Kotivalo', 4), (5, 'Juustina', 4), (6, 'Vihtori', 4);

直接用COUNT(*)结合GROUP BY cart_id会将同一车厢的乘客聚合为单条记录,因此无法返回所有乘客的对应结果。要实现需求,需先统计每个车厢的总乘客数,再关联回原表计算其他乘客数(总人数减1,排除乘客自身)。

方法1:子查询关联

先通过子查询统计各车厢总人数,再与原表关联计算:

SELECT 
    p.name AS `Column A`,
    (c.total_count - 1) AS `Column B`
FROM passengers p
JOIN (
    SELECT cart_id, COUNT(*) AS total_count
    FROM passengers
    GROUP BY cart_id
) c ON p.cart_id = c.cart_id
ORDER BY p.id;

方法2:窗口函数(适用于MySQL 8.0+、PostgreSQL等支持窗口函数的数据库)

使用窗口函数直接计算当前乘客所在车厢的总人数,再减1得到其他乘客数:

SELECT 
    name AS `Column A`,
    (COUNT(*) OVER (PARTITION BY cart_id) - 1) AS `Column B`
FROM passengers
ORDER BY id;

两种方法均可得到期望结果:

Column AColumn B
Uolevi1
Maija1
Kaaleppi0
Kotivalo2
Juustina2
Vihtori2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:55:16