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

SQL查询:电影租赁场景下获取并列最高值的所有记录

解决方案

你可以通过**CTE(公共表表达式)**结合DENSE_RANK()函数实现需求,具体如下:

最终SQL语句

WITH UserRentalCounts AS (
    SELECT 
        cust.email,
        COUNT(DISTINCT inv.mov_id) AS Rented_Count
    FROM cust
    JOIN rent ON rent.cust_id = cust.cust_id
    JOIN inv ON inv.inv_id = rent.inv_id
    JOIN mov ON mov.mov_id = inv.mov_id
    WHERE rent.rent_date BETWEEN '2022-09-01' AND '2022-09-30' -- 修正:9月无31日,避免日期过滤错误
    GROUP BY cust.email
),
RankedUsers AS (
    SELECT 
        email,
        DENSE_RANK() OVER (ORDER BY Rented_Count DESC) AS rental_rank
    FROM UserRentalCounts
)
SELECT email
FROM RankedUsers
WHERE rental_rank = 1;

逻辑说明

  1. 统计用户租赁数
    UserRentalCounts CTE复用你原有的统计逻辑,修正了日期边界错误,计算出每个用户在2022年9月租赁的唯一电影数量。

  2. 为用户排名
    RankedUsers CTE使用DENSE_RANK()函数,按租赁数量降序为用户排名。DENSE_RANK()的特性是:并列记录会获得相同排名,且后续排名不会跳跃,完美适配并列第一的场景。

  3. 筛选排名第一的用户
    最后只选择rental_rank = 1的记录,即可得到所有租赁数量最多的用户邮箱。

额外提示

如果想更精准匹配整个9月的租赁记录,可使用DATE_TRUNC函数替代日期区间判断(以PostgreSQL为例):

WHERE DATE_TRUNC('month', rent.rent_date) = '2022-09-01'

这种写法能避免手动输入月末日期的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:20:32