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

求助:在Sakila数据库中用表式子查询获取租赁次数最多的客户

解决Sakila数据库中用子查询找出租赁次数最多的客户问题

你的原查询之所以只返回第一行客户加最大租赁次数,是因为直接使用MAX(Num_rentals)却没有按客户分组,数据库会将所有行聚合为一行,随机取一个客户信息(通常是表中第一行)并附上全局最大租赁次数,这不符合需求。

以下是满足你要求的子查询实现方式:

SELECT c.customer_id, c.first_name, c.last_name, sub.num_rentals
FROM customer c
JOIN (
    -- 计算每个客户的租赁次数
    SELECT customer_id, COUNT(*) AS num_rentals
    FROM rental
    GROUP BY customer_id
) sub ON c.customer_id = sub.customer_id
-- 筛选出租赁次数等于全局最大值的客户
WHERE sub.num_rentals = (
    SELECT MAX(rental_count)
    FROM (
        -- 先拿到所有客户的租赁次数,再取最大值
        SELECT COUNT(*) AS rental_count
        FROM rental
        GROUP BY customer_id
    ) max_counts
);

这个查询的逻辑是:

  1. 内层子查询先统计每个客户的租赁次数;
  2. 嵌套子查询从这些租赁次数里找出最大值;
  3. 最后关联客户表和租赁次数统计结果,只保留租赁次数等于最大值的客户记录,这样即使有多个客户并列第一,也能全部返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:55:21