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

PostgreSQL多表关联查询如何实现各区域销量TOP2商品统计

错误原因
  1. 表关联条件错误:和dim_product表关联时,错误写为FS.territory_id=DT.territory_id,没有关联商品ID字段,导致事实表每一行都匹配了全部商品行,产生笛卡尔积,最终统计出来的销量全部是区域总销量,和商品无关。
  2. 缺少分组取TOP N逻辑:原SQL仅做了全局排序,没有按区域分组筛选前2名商品的逻辑。
修正后SQL
-- 先聚合每个区域每个商品的总销量,再做分区排序取前2
WITH region_product_sales AS (
    SELECT
        DT.region,
        DP.product_name,
        SUM(FS.quantity) AS total_sales,
        -- 按区域分组,组内按销量倒序排名
        ROW_NUMBER() OVER (PARTITION BY DT.region ORDER BY SUM(FS.quantity) DESC) AS rank_num
    FROM fact_sales FS
    INNER JOIN dim_territory DT ON FS.territory_id = DT.territory_id
    -- 修正商品表关联条件,关联商品ID
    INNER JOIN dim_product DP ON FS.product_id = DP.product_id
    GROUP BY DT.region, DP.product_name
)
SELECT region, product_name, total_sales
FROM region_product_sales
WHERE rank_num <= 2
ORDER BY region, total_sales DESC;

说明:如果需要保留并列排名的结果,把ROW_NUMBER()换成RANK()即可。

运行结果
regionproduct_nametotal_sales
AUSmountain bike5
AUSpatch kit4
FRNlogo10
GRMNmountain bike5
GRMNpatch kit4

内容的提问来源于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:57:03