【发布时间】:2025-12-05 22:25:01
【问题描述】:
请帮我使用mysql进行查询,显示所有5个仓库中总数量SUM(goods.quantity) > 100的产品(product.name),指定数量最多的仓库(warehouse.name)每个产品的。以下是所有表格的示意图,以便更好地理解:
我正在尝试这个查询:
SELECT product.name AS product, warehouse.name AS warehouse
FROM product, warehouse, goods
WHERE goods.productId = product.id AND goods.warehouseId = warehouse.id
GROUP BY product.name, warehouse.name
HAVING SUM(goods.quantity)>100;
它给了我以下信息:
| product | warehouse |
|---|---|
| engine | New York |
| right back door | New York |
| main frame | London |
| left back door | London |
| back lights | London |
| steering wheel | Sydney |
| wheel | Toronto |
| car cleaner | Toronto |
但它只显示所有仓库中具有goods.quantity > 100 的产品,而不是SUM(goods.quantity) > 100。
此外,它不显示每种产品数量最多的仓库,而是显示有该产品的任何仓库。
【问题讨论】:
-
提供示例数据(作为 CREATE TABLE + INSERT INTO 脚本)和该数据所需的输出。
-
你使用的是什么 MySQL 版本?
-
不相关,但是:不要使用逗号分隔的连接。请改用
INNER JOIN, LEFT OUTER JOIN等。这些显式连接是 1992 年在标准 SQL 中引入的。那是在 MySQL 出现之前。我的建议:放弃教你这种古老语法的老师、书籍或教程。 -
您查询的主要问题是您按产品和仓库分组。这意味着您是商品行的级别之一,
SUM(quantity)与quantity相同。您想查看一种产品,即按产品分组。 -
对,但是当我只按 product.name 分组时,它给我一个错误 ERROR 1055 (42000): Expression #3 of SELECT list is not in GROUP BY, 所以它需要按warehouse.name 分组也是。