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

如何用SQL按销售额四分位对百万级产品数据分组?

按总销售额区间分组的SQL解决方案

核心思路

要实现按总销售额的25%区间分组(而非按行数四分位),且适配百万级数据避免硬编码,核心是通过窗口函数计算动态累计销售额,结合总销售额的比例阈值划分分组。这种方法无需提前计算固定阈值,完全适配数据变化。

通用SQL方案

以下代码兼容PostgreSQL、MySQL 8.0+、SQL Server等主流数据库,效率适配百万行数据:

WITH total_sales AS (
    -- 计算所有有效数据(排除销售额0)的总销售额
    SELECT SUM(sales) AS total FROM product_sales WHERE sales > 0
),
ranked_products AS (
    -- 过滤无效数据,按销售额降序排序,计算累计销售额及总销售额值
    SELECT
        product,
        sales,
        SUM(sales) OVER (ORDER BY sales DESC) AS cumulative_sales,
        (SELECT total FROM total_sales) AS total_sales_val
    FROM product_sales
    WHERE sales > 0
)
SELECT
    product,
    sales,
    CASE
        -- 前25%销售额区间:当前产品之前的累计未达总销售额25%
        WHEN (cumulative_sales - sales) < total_sales_val * 0.25 THEN 'Q1'
        -- 25%-50%区间:当前产品之前的累计在25%-50%之间
        WHEN (cumulative_sales - sales) < total_sales_val * 0.5 THEN 'Q2'
        -- 50%-75%区间:当前产品之前的累计在50%-75%之间
        WHEN (cumulative_sales - sales) < total_sales_val * 0.75 THEN 'Q3'
        -- 剩余区间:最低25%销售额
        ELSE 'Q4'
    END AS sales_quadrant
FROM ranked_products
ORDER BY sales DESC;

示例验证

示例表(product_sales)

CREATE TABLE product_sales (
    product VARCHAR(10),
    sales INT
);

INSERT INTO product_sales VALUES
('A', 100),
('B', 80),
('C', 60),
('D', 40),
('E', 20),
('F', 0),
('G', 10);

关键计算

总销售额 = 100+80+60+40+20+10 = 310
区间阈值:

  • Q1阈值:310×0.25 = 77.5
  • Q2阈值:310×0.5 = 155
  • Q3阈值:310×0.75 = 232.5

预期输出

productsalessales_quadrant
A100Q1
B80Q2
C60Q3
D40Q4
E20Q4
G10Q4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:05:33