如何从order与affiliate表统计关联订单数并返回单一结果?
按推广商名称统计订单数量的正确SQL写法
嘿,我来帮你搞定这个统计需求~你的目标是通过affiliate_ID关联order和affiliate表,按affiliate_name分组统计对应的订单总数对吧?你原来的查询语句看起来没写完,而且语法上有问题(比如用AND连接子查询的方式不对),我给你两种实用的正确写法:
1. 仅统计有订单的推广商(INNER JOIN)
这种写法只会返回那些至少有一个订单的推广商记录:
SELECT a.affiliate_name, COUNT(o.order_ID) AS order_count FROM affiliate a INNER JOIN `order` o ON a.affiliate_ID = o.affiliate_ID GROUP BY a.affiliate_name;
关键点说明:
- 用
INNER JOIN关联两张表,精准匹配affiliate_ID一致的记录 - 用
COUNT(o.order_ID)替代COUNT(*)更严谨,它只会统计存在的订单ID,避免关联时的空值干扰 GROUP BY a.affiliate_name指定按推广商名称分组统计总数
2. 统计所有推广商(含无订单的,LEFT JOIN)
如果你想把没有任何订单的推广商也列出来(订单数显示为0),就用LEFT JOIN搭配COALESCE函数:
SELECT a.affiliate_name, COALESCE(COUNT(o.order_ID), 0) AS order_count FROM affiliate a LEFT JOIN `order` o ON a.affiliate_ID = o.affiliate_ID GROUP BY a.affiliate_name;
关键点说明:
LEFT JOIN会保留affiliate表的所有记录,即使对应的order表没有匹配项COALESCE函数把统计结果中的空值转换成0,确保无订单的推广商也能显示正确的数量- 注意:
order是SQL的关键字,所以查询时要用反引号(`)把表名括起来,避免语法报错
内容的提问来源于stack exchange,提问作者Ask Xah
相关产品推荐
相关产品推荐

