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

SQL技术问询:如何查询最高商品购买量及对应客户姓名信息

查询最高商品购买量的客户

嘿,我来帮你搞定这个SQL查询需求!首先先明确下你提到的两张表的结构(为了写SQL方便,我给它们起个好懂的名字):

  • purchase_data:存的是每笔订单的购买明细,字段有 customer_id(客户ID)、order_id(订单ID)、purchase_quantity(这笔订单里客户买的商品数量)
  • order_customer_map:以 order_id 为主键,里面有订单对应的客户ID、客户的名和姓——也就是字段包括 order_id、customer_id(关联purchase_data的客户ID)、first_name、last_name

方法1:用子查询找最高购买量

这个方法适合只需要拿单一最高值的场景(如果有多个客户买得一样多且都是最高,只会返回其中一个):

SELECT 
    CONCAT(ocm.first_name, ' ', ocm.last_name) AS customer_full_name,
    pd.purchase_quantity
FROM 
    purchase_data pd
JOIN 
    order_customer_map ocm ON pd.customer_id = ocm.customer_id AND pd.order_id = ocm.order_id
WHERE 
    pd.purchase_quantity = (
        SELECT MAX(purchase_quantity) 
        FROM purchase_data
    );

方法2:用窗口函数(强烈推荐,支持并列第一)

实际业务里经常会有多个客户购买量并列最高的情况,用窗口函数就能一次性把所有符合条件的客户都查出来,比子查询灵活多了:

WITH ranked_purchases AS (
    SELECT 
        CONCAT(ocm.first_name, ' ', ocm.last_name) AS customer_full_name,
        pd.purchase_quantity,
        RANK() OVER (ORDER BY pd.purchase_quantity DESC) AS purchase_rank
    FROM 
        purchase_data pd
    JOIN 
        order_customer_map ocm ON pd.customer_id = ocm.customer_id AND pd.order_id = ocm.order_id
)
SELECT 
    customer_full_name,
    purchase_quantity
FROM 
    ranked_purchases
WHERE 
    purchase_rank = 1;

额外提醒:如果要查客户累计总购买量

哦对了,如果你要的不是某一笔订单的最高购买量,而是某个客户所有订单加起来的总购买量的最高值,那得先按客户ID分组求和,再找最大值。给你写个窗口函数版本的:

WITH customer_total_purchases AS (
    SELECT 
        pd.customer_id,
        SUM(pd.purchase_quantity) AS total_quantity
    FROM 
        purchase_data pd
    GROUP BY 
        pd.customer_id
),
ranked_customers AS (
    SELECT 
        CONCAT(ocm.first_name, ' ', ocm.last_name) AS customer_full_name,
        ctp.total_quantity,
        RANK() OVER (ORDER BY ctp.total_quantity DESC) AS total_rank
    FROM 
        customer_total_purchases ctp
    JOIN 
        order_customer_map ocm ON ctp.customer_id = ocm.customer_id
    -- 因为同一个客户可能对应多个订单,这里要去重避免重复结果
    GROUP BY 
        ctp.customer_id, ocm.first_name, ocm.last_name, ctp.total_quantity
)
SELECT 
    customer_full_name,
    total_quantity
FROM 
    ranked_customers
WHERE 
    total_rank = 1;

你可以根据自己的实际需求选对应的SQL就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:43:02