我有两个桌子
表1:(用户)ID,名称,用户名,密码
表2:(订单)ID,用户,状态
状态 列具有两个值:1(取消订单)或 2(成功订单)
我想显示所有用户列表,并将订单数计为 orders (仅成功订单的订单数)
我写这个sql:
select `user`.* , count(`sale`.`user`) as 'orders'
from `user`
left join `sale`
on `sale`.`user` = `user`.`id`
where `user`.`type` = 'customer'
and (`sale`.`status` IS NULL OR `sale`.`status` = 2)
group by `user`.`id`
order by `user`.`id` DESC
在此查询中,如果结果中没有显示用户没有任何订单或有成功订单
但如果用户取消的订单未显示在结果中
我要在结果中显示所有用户和订单列
如果订单状态为2,则订单列显示成功订单的数量
如果订单状态为1或为空(用户没有任何订单),则结果的订单栏中显示为0计数
预先感谢
答案 0 :(得分:2)
将status
上的条件移至on
子句:
select u.* , count(s.user) as orders
from `user` u left join
sale s
on s.`user` = u.id AND s.status = 2
where u.`type` = 'customer'
group by u.id -- ok, assuming id is unique
order by u.id DESC