如何在MySQL中统计各医生对应的产品线数量?
MySQL 按医生统计各产品线数量的实现方案
你需要的统计可以通过在原查询基础上添加GROUP BY分组和COUNT()聚合函数实现,具体SQL如下:
USE avant_medical; SELECT sales.doctor_id AS DoctorID, line_products.id AS LineProductID, line_products.name AS LineProductName, COUNT(*) AS quantity FROM `doctors` INNER JOIN `sales` ON `doctors`.`id` = `sales`.`doctor_id` INNER JOIN `inventories` ON `sales`.`id` = `inventories`.`sale_id` INNER JOIN `products` ON `inventories`.`product_id` = `products`.`id` INNER JOIN `line_products` ON `products`.`lineProduct_id` = `line_products`.`id` GROUP BY sales.doctor_id, line_products.id, line_products.name ORDER BY `doctors`.`id` ASC, quantity DESC;
关键说明:
COUNT(*):统计每组(医生+对应产品线)的记录数,也就是该医生使用该产品线的数量GROUP BY:按医生ID、产品线ID、产品线名称分组,确保每个医生的每条产品线单独统计(MySQL默认开启ONLY_FULL_GROUP_BY模式,要求非聚合字段必须出现在GROUP BY中)- 额外添加
quantity DESC:让每个医生下的产品线按数量从多到少排序,更直观
结果说明:
上述SQL会返回结构化的统计数据,示例如下:
| DoctorID | LineProductID | LineProductName | quantity |
|---|---|---|---|
| 1 | 7 | 产品线7名称 | 4 |
| 1 | 6 | 产品线6名称 | 3 |
你期望的那种“Doctor 1”开头的分层展示格式,MySQL原生SELECT语句无法直接生成(它仅返回规整的行数据),这种格式需要在应用层(比如后端代码、报表工具)中处理:先按DoctorID分组遍历,输出医生标题后再渲染对应的产品线统计表格即可。
内容的提问来源于stack exchange,提问作者user20389386
相关产品推荐
相关产品推荐

