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

如何在PostgreSQL中查询销量最高的售出商品及其总售价?

嘿,刚接触PostgreSQL的话,这个需求其实很常见,咱们来一步步搞定它~

首先,咱们得先理清表之间的关联关系:soldProducts记录了每一笔售出的商品,通过productID关联到product表,再通过product里的productInformationID关联到productInformation表拿到商品的价格。

要实现「销量最高的商品+总销售价格」,咱们可以用CTE(公共表表达式)来分步处理,这样逻辑更清晰,也容易理解:

WITH product_sales AS (
    SELECT
        p.productid,
        COUNT(sp.id) AS total_sales,
        SUM(pi.price) AS total_revenue
    FROM soldProducts sp
    JOIN product p ON sp.productid = p.productid
    JOIN productInformation pi ON p.productinformationid = pi.productinformationid
    GROUP BY p.productid
),
ranked_sales AS (
    SELECT
        productid,
        total_sales,
        total_revenue,
        RANK() OVER (ORDER BY total_sales DESC) AS sales_rank
    FROM product_sales
)
SELECT productid, total_sales, total_revenue
FROM ranked_sales
WHERE sales_rank = 1;

咱们来拆解一下这段代码:

  • 第一个CTE product_sales:把三个表关联起来,按商品ID分组,统计每个商品的总销量(用COUNT(sp.id)统计销售记录的条数)和总销售价格(用SUM(pi.price)把每一笔销售对应的商品价格加起来)。
  • 第二个CTE ranked_sales:用RANK()窗口函数给每个商品按销量从高到低排名,销量最高的商品会得到sales_rank = 1。这里用RANK()的好处是,如果有多个商品销量并列第一,它们都会被标记为第1名,不会漏掉。
  • 最后一步就是筛选出排名为1的记录,就能得到咱们想要的结果啦!

如果你的业务场景里只需要返回其中一个(哪怕有并列),可以把RANK()换成ROW_NUMBER(),不过通常RANK()更符合实际需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:07:36