SQL分组计数统计,没有条数需要显示数量0

问题背景

需要统计店铺的订单数,订单表t_order中有shop字段表明属于哪个店铺

--该语句可以统计,但没有订单的店铺并没有显示出来
select shop, count(*) from t_order group by shop;

解决方法

以MySQL为例

select t_shop.id, count(t_order.id) from t_shop left join t_order on t_order.shop = t_shop.id group by t_shop.id;

以店铺表t_shop为主表左连接订单表t_order,可以保证统计时肯定能显示所有店铺,由于左连接的特性,没有订单的店铺也会查询出一条信息,使用count(t_order.id)可以把订单信息为null的条数排除在统计范围外。(此处如果用where来排除,也会使没有订单的店铺无法显示) 这样没有订单的店铺统计结果显示为0