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

PostgreSQL关联两表提取年份统计颜色获取每年最受欢迎颜色方法

实现方案

完整PostgreSQL语句(兼容并列最高销量场景)

WITH yearly_color_sales AS (
    -- 统计每年各颜色的总销量
    SELECT
        EXTRACT(YEAR FROM FS.order_date) AS sale_year,
        DP.color,
        SUM(FS.quantity) AS total_sales
    FROM fact_sales FS
    JOIN dim_product DP ON FS.product_id = DP.product_id
    GROUP BY sale_year, DP.color
),
sales_ranking AS (
    -- 按年份分组对销量降序排名,销量相同则排名一致
    SELECT
        sale_year,
        color,
        total_sales,
        RANK() OVER (PARTITION BY sale_year ORDER BY total_sales DESC) AS rank_num
    FROM yearly_color_sales
)
-- 筛选每年排名第一的颜色
SELECT sale_year, color, total_sales
FROM sales_ranking
WHERE rank_num = 1
ORDER BY sale_year;

结果说明

针对你提供的示例数据,运行后输出结果如下:

sale_yearcolortotal_sales
2016Silver3
2017Red4

如果某一年存在多个颜色销量并列最高的情况,所有并列的颜色都会被返回。

简化写法(PostgreSQL专属,性能更优)

如果你不需要处理并列最高的场景,只需要取任意一个最高销量的颜色,可以使用DISTINCT ON语法简化语句:

SELECT DISTINCT ON (sale_year)
    EXTRACT(YEAR FROM FS.order_date) AS sale_year,
    DP.color,
    SUM(FS.quantity) AS total_sales
FROM fact_sales FS
JOIN dim_product DP ON FS.product_id = DP.product_id
GROUP BY sale_year, DP.color
ORDER BY sale_year, total_sales DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:36:00