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

如何查询各省份中各产品的最高收入值?

解决每个省份下每个产品的最高收入查询问题

首先,我先理清楚你的需求和现有SQL的问题,再给出对应解决方案:

你的原SQL问题分析

你尝试的SQL语句其实做了重复工作:

SELECT PRODUCT, PROVINCE, MAX(TOTAL) 
FROM ( 
    SELECT PRODUCT, PROVINCE, SUM(INCOME) TOTAL 
    FROM SALES 
    GROUP BY PRODUCT,PROVINCE 
) 
GROUP BY PRODUCT,PROVINCE;

内层子查询已经按PRODUCT和PROVINCE分组,算出了每个产品在对应省份的收入总和TOTAL。外层再对同样的分组取MAX(TOTAL)完全没有意义——因为每个分组只有一个TOTAL值,MAX结果就是它本身,相当于直接查询内层子查询的结果,并没有实现“最高收入值”的预期逻辑。

针对不同需求的解决方案

我分两种常见的需求场景给你对应SQL:

场景1:查询每个省份下,每个产品的单笔最高收入

如果你的需求是每个产品在某个省份里的最大单笔收入(比如Apple在Seville地区的单笔最高收入是13.2),直接分组取MAX即可,不需要求和:

SELECT 
    PRODUCT, 
    PROVINCE, 
    MAX(INCOME) AS MAX_SINGLE_INCOME
FROM SALES
GROUP BY PRODUCT, PROVINCE;

场景2:查询每个省份下,收入总和最高的产品

如果你的需求是找出每个省份中,收入总和最高的产品及其总和(比如Almeria地区收入最高的产品是Melon,总和3.6),可以用窗口函数RANK()来实现:

WITH PRODUCT_PROV_TOTAL AS (
    SELECT 
        PRODUCT, 
        PROVINCE, 
        SUM(INCOME) AS TOTAL_INCOME,
        -- 按省份分组,对收入总和降序排名
        RANK() OVER (PARTITION BY PROVINCE ORDER BY SUM(INCOME) DESC) AS RANK_NUM
    FROM SALES
    GROUP BY PRODUCT, PROVINCE
)
SELECT PRODUCT, PROVINCE, TOTAL_INCOME
FROM PRODUCT_PROV_TOTAL
WHERE RANK_NUM = 1;

这个SQL会返回每个省份中收入总和最高的产品,如果有多个产品总和并列第一,所有符合条件的产品都会被返回。

内容的提问来源于stack exchange,提问作者Juan Antonio González Rivera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:52:44