PostgreSQL多表关联查询:按品类统计供应商库存总量
PostgreSQL多表关联查询:按品类和供应商统计库存总量
数据表结构与数据
1. 品类表(Categories)
| category_id | category_name |
|---|---|
| 1 | kitchen(厨房) |
| 2 | bedroom(卧室) |
2. 供应商表(Suppliers)
注:原数据中ebay的supplier_id存在笔误,修正为3以匹配产品表关联关系:
| supplier_id | supplier_name |
|---|---|
| 1 | amazon |
| 2 | wallmart |
| 3 | ebay |
3. 产品表(Product)
| product_id | product_name | category_id | supplier_id | stock(库存) |
|---|---|---|---|---|
| 1 | bed(床) | 2 | 1 | 2 |
| 2 | table(桌子) | 2 | 2 | 10 |
| 3 | glass(玻璃杯) | 1 | 1 | 4 |
| 4 | plate(盘子) | 1 | 3 | 10 |
| 5 | spoon(勺子) | 1 | 3 | 20 |
需求说明
关联三张表,统计每个品类下各供应商的当前库存总量,预期结果如下:
| 品类 | 供应商 | 库存总量 |
|---|---|---|
| bedroom(卧室) | amazon | 2 |
| kitchen(厨房) | amazon | 4 |
| bedroom(卧室) | wallmart | 10 |
| kitchen(厨房) | ebay | 30 |
实现SQL语句
SELECT c.category_name AS "品类", s.supplier_name AS "供应商", SUM(p.stock) AS "库存总量" FROM Product p JOIN Categories c ON p.category_id = c.category_id JOIN Suppliers s ON p.supplier_id = s.supplier_id GROUP BY c.category_name, s.supplier_name ORDER BY c.category_name, s.supplier_name;
语句说明
- 通过
JOIN关键字关联三张表:产品表与品类表通过category_id匹配,产品表与供应商表通过supplier_id匹配; - 使用
SUM(p.stock)聚合函数计算每个分组的库存总和; GROUP BY子句按品类名称和供应商名称分组,确保每个品类+供应商组合返回唯一的统计结果;ORDER BY子句用于按品类和供应商名称排序,使结果更规整。
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

