如何找到出现次数最多且数量最大的 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
我正在申请管理库存,我的一项职能是报告。
我正在尝试制作一份基本的前五名产品销售报告,但我根本无法理解它应该是什么样子。
到目前为止,我可以 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