一条 SQL 数商品:一级类目销量大揭秘,3 张表层层剥洋葱!
📌 场景
领导要看“每个一级类目下到底有多少商品”。
我们只有 3 张表:
• category(类目表)
• product(商品表)
🧠 先拼再数

🧩 原始数据速览
category(类目表) | product(商品表) |
---|
id | name |
1 | 手机 |
2 | 电脑 |
3 | iPhone |
4 | 小米 |
5 | 笔记本 |
6 | 台式机 |
id | name |
101 | iPhone15 |
102 | iPhone14 |
103 | 小米13 |
104 | MacBook |
105 | Dell台式 |
🪜 4 步层层筛选表
步骤 | 操作 | 结果示例(仅展示核心列) |
---|
① 连一级类目→二级类目 | JOIN category c2 ON c2.parent_id = c1.id | c1_name | c2_name |
---|
手机 | iPhone | 手机 | 小米 | 电脑 | 笔记本 | 电脑 | 台式机 |
|
② 把商品挂进来 | JOIN product p ON p.category_id = c2.id | c1_name | p_name |
---|
手机 | iPhone15 | 手机 | iPhone14 | 手机 | 小米13 | 电脑 | MacBook | 电脑 | Dell台式 |
|
③ 分组 | GROUP BY c1.id, c1.name | 把同名行装进同一袋子 |
④ 计数 | COUNT(*) | |
✅ 最终 SQL
SELECT c1.name,
COUNT(*) AS product_cnt
FROM category AS c1
JOIN category AS c2
ON c2.parent_id = c1.id
JOIN product AS p
ON p.category_id = c2.id
GROUP BY c1.id, c1.name;
🎯 一句话总结
先把一级类目→二级类目→商品全部连成一张大表,再按一级类目打包数行数,商品数量瞬间一目了然!