如何跨表统计分类下物品总数?关联表数据查询求助
解决分类物品总数统计的SQL方案
嘿,这个需求用SQL的关联查询+分组统计就能轻松搞定!我给你两种常用的方案,根据你的实际需求选就行:
方案一:只统计有物品的分类(内连接)
如果只需要显示那些在table2里有对应物品的分类,用INNER JOIN关联两张表,再配合GROUP BY和COUNT统计:
SELECT table1.category, COUNT(table2.id) AS item_total FROM table1 INNER JOIN table2 ON table1.ID = table2.invid GROUP BY table1.category;
逻辑拆解:
INNER JOIN会只保留两张表中关联匹配的记录(也就是table1里有对应物品的分类)GROUP BY table1.category把结果按分类分组COUNT(table2.id)统计每个分组下的物品数量(用table2的主键字段统计更准确,避免NULL干扰)
按你给出的数据,运行这段代码会得到:
| category | item_total |
|---|---|
| Cats | 2 |
| Dogs | 1 |
| chicken | 4 |
方案二:显示所有分类(包括无物品的,左连接)
如果table1里存在一些还没有对应物品的分类,你想把这些分类也显示出来(物品数显示0),就用LEFT JOIN:
SELECT table1.category, COUNT(table2.invid) AS item_total FROM table1 LEFT JOIN table2 ON table1.ID = table2.invid GROUP BY table1.category;
关键说明:
LEFT JOIN会保留table1的所有记录,即使table2里没有匹配的物品,对应字段会显示NULLCOUNT(table2.invid)会自动忽略NULL值,所以无物品的分类会统计出0,而不是1(如果用COUNT(*)就会把NULL也算进去,得到错误的1)
内容的提问来源于stack exchange,提问作者cryptohustla




