SQL查询需求:获取各分类名称及对应商品数量
获取分类名称及对应商品数量的SQL语句
嗨,这就给你搞定这条SQL,还会把逻辑说清楚,让你明白为什么这么写~
先把你的表结构明确一下:
分类表(假设表名为categories)
| ID | category_name |
|---|---|
| 1 | Pizza |
| 2 | Salad |
| 3 | Desert |
| 4 | Sandwiches |
商品表(假设表名为products)
| ID | name | category |
|---|---|---|
| 1 | Margherita | 1 |
| 2 | Quatro Stagioni | 1 |
| 3 | Pancakes | 3 |
| 4 | Some Salad | 2 |
最终SQL语句
SELECT c.category_name, COUNT(p.ID) AS product_count FROM categories c LEFT JOIN products p ON c.ID = p.category GROUP BY c.ID, c.category_name ORDER BY c.ID;
逻辑解释
- 用
LEFT JOIN是为了保留所有分类,哪怕这个分类下还没有商品(比如你的Sandwiches分类),如果用INNER JOIN就会漏掉这类没有商品的分类。 COUNT(p.ID)统计每个分类下的商品数量,因为如果没有匹配的商品,p.ID会是NULL,COUNT会自动忽略NULL值,所以结果会显示0而不是NULL。GROUP BY包含分类的ID和名称,确保每个分类作为单独的一行返回,避免因为分类名称重复(虽然你这里没有,但做个通用处理更稳妥)导致的分组错误。ORDER BY c.ID是为了让结果和分类表的ID顺序一致,看起来更清晰。
执行这条SQL后,你会得到如下结果:
| category_name | product_count |
|---|---|
| Pizza | 2 |
| Salad | 1 |
| Desert | 1 |
| Sandwiches | 0 |
内容的提问来源于stack exchange,提问作者Mitca Vicentiu
相关产品推荐
相关产品推荐

