如何在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
相关产品推荐
相关产品推荐

