如何找到出现次数最多且数量最大的 product_id SQL

How to find the product_id with the most occurences and biggest quantity SQL

我正在申请管理库存,我的一项职能是报告。

我正在尝试制作一份基本的前五名产品销售报告,但我根本无法理解它应该是什么样子。

到目前为止,我可以 return table 的 count() 的 max() 例如

SELECT MAX(product_quantity) FROM 
(SELECT COUNT(quantity) as product_quantity FROM
sales_products) as derived; 

现在,如果我在 select 中添加 product_id,我会收到未知字段错误:

SELECT product_id, MAX(product_quantity) FROM 
    (SELECT COUNT(quantity) as product_quantity FROM
    sales_products) as derived;

我的两个问题是为什么我在引用 table 时得到未知字段(尝试使用 table 名称或派生的别名)以及如何获得前 5 名而不是仅仅首先?非常感谢您的时间和耐心!

下面是erd和数据结构的图片

如果您想要销量最高的产品,请尝试以下查询

SELECT product_id, COUNT(quantity) as product_quantity 
FROM sales_products
GROUP BY product_id
HAVING COUNT(quantity) >= ALL(
    SELECT COUNT(quantity)
    FROM sales_products
    GROUP BY product_id 
)

正如 Damien 所提到的,您可能需要 quantity 的总和,而不是每个 product_id 的记录数 sales_products。因此,在这种情况下,解决方案应该是

SELECT product_id, SUM(quantity) as product_quantity 
FROM sales_products
GROUP BY product_id
HAVING SUM(quantity) >= ALL(
    SELECT SUM(quantity)
    FROM sales_products
    GROUP BY product_id 
)

编辑:(OP 问题:与我可以获得的结果数量有关,我怎样才能获得其中的前 5 名?)

这可能有点棘手,因为 MySQL 不支持 ALL/IN/ANY 子查询中的 LIMIT。解决方法如下:

SELECT product_id, SUM(quantity) as product_quantity 
FROM sales_products
GROUP BY product_id
HAVING SUM(quantity) >= (
    SELECT MIN(quantity_sum)
    FROM
    (
        SELECT SUM(quantity) quantity_sum
        FROM sales_products
        GROUP BY product_id 
        ORDER BY SUM(quantity) desc
        LIMIT 5
    ) t
)

编辑 2: 如果您只关心前 5 名而不关心平局(这意味着您可以拥有例如总数量相同的前 10 名产品你可以随机 select 只是 5) 然后你可以使用这个

SELECT product_id, SUM(quantity) as product_quantity 
FROM sales_products
GROUP BY product_id
ORDER BY SUM(quantity) desc
LIMIT 5