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

如何获取每个carID对应的numClients最大值的SQL技术问询

解决每个carID对应最大numClients的问题

看起来你已经搞定了第一步——统计出每个客户对应每辆车的租赁次数,现在要进一步找出每辆车被单个客户租赁次数最多的记录对吧?我给你两种实用的解决方案,你可以根据需求选择:

方法一:用窗口函数(推荐,简洁灵活)

窗口函数能帮你快速给每个carID分组里的记录按租赁次数排序,直接筛选出排名第一的记录。如果有多个客户对同一辆车的租赁次数并列最高,还可以灵活调整是否保留所有并列记录:

WITH client_car_rent_counts AS (
    -- 复用你原来的统计逻辑,得到每个carID+clientID的租赁次数
    SELECT carID, clientID, COUNT(*) AS numClients 
    FROM RENT R JOIN DETAILS_OF_RENT D ON d.rentID = r.ID 
    GROUP BY carID, clientID
)
SELECT carID, clientID, numClients
FROM (
    SELECT *,
           -- 按carID分组,每组内按numClients降序排,给每条记录标排名
           ROW_NUMBER() OVER (PARTITION BY carID ORDER BY numClients DESC) AS rn
    FROM client_car_rent_counts
) t
WHERE rn = 1;
  • 如果你只需要每个carID下任意一条最大租赁次数的记录,用ROW_NUMBER()就好;
  • 如果想保留所有并列最大值的记录(比如同一辆车有两个客户都租了5次,都是最大值),把ROW_NUMBER()换成RANK()就行。

方法二:用子查询关联

这种方法逻辑更直观,先找出每个carID的最大租赁次数,再关联回原统计结果找到对应的客户:

-- 第一步:统计每个carID+clientID的租赁次数
WITH client_car_rent_counts AS (
    SELECT carID, clientID, COUNT(*) AS numClients 
    FROM RENT R JOIN DETAILS_OF_RENT D ON d.rentID = r.ID 
    GROUP BY carID, clientID
),
-- 第二步:找出每个carID对应的最大租赁次数
max_rent_per_car AS (
    SELECT carID, MAX(numClients) AS max_numClients
    FROM client_car_rent_counts
    GROUP BY carID
)
-- 第三步:关联两个结果,得到每个carID下租赁次数等于最大值的记录
SELECT c.carID, c.clientID, c.numClients
FROM client_car_rent_counts c
JOIN max_rent_per_car m ON c.carID = m.carID AND c.numClients = m.max_numClients;

这个方法默认会保留所有并列最大值的记录,适合你需要查看所有达到最高租赁次数的客户场景。

内容的提问来源于stack exchange,提问作者K O K I T A S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:10:26