【问题标题】:select top 2 bestseller products from each brands从每个品牌中选择前 2 名畅销产品
【发布时间】:2018-08-26 08:13:04
【问题描述】:

这样的简单查询:

SELECT
    products.*,
    SUM(orderdetails.quantity) AS sold
FROM products
RIGHT JOIN orderdetails ON orderdetails.product_id = products.id
GROUP BY products.id, products.brand_id
ORDER BY sold DESC

如何改成每个品牌只有两个产品?

【问题讨论】:

  • 每个品牌随机两个产品,能不能具体点?
  • @KIKOSoftware 是ORDER BY sold DESC,表示两款顶级产品
  • products.id 是唯一的吗?
  • 您使用的是哪个 MySQL 版本?
  • @guigoz 是的

标签: mysql select group-by mysql-5.7


【解决方案1】:

以下代码将对您有所帮助,

 SELECT ranked.*
   FROM
     (SELECT products.*, 
             @product_rank := IF(@current_brand = products.brand_id, @product_rank + 1, 1) AS product_rank,
             @current_brand := products.brand_id 
       FROM ( SELECT
              products.*,
              SUM(orderdetails.quantity) AS sold
              FROM products
              JOIN orderdetails ON orderdetails.product_id = products.id
              GROUP BY products.id, products.brand_id
              ORDER BY products.brand_id,sold  DESC
             ) products      
     ) ranked
   WHERE product_rank <= 2

SqlFiddle Demo Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多