mysql - 在mysql中加入两个具有特定条件的表
问题描述
我有两张桌子
表 1: (用户) id,name,username,password
表 2:(订单)id、用户、状态
状态 栏有两个值:1(取消订单)或2(成功订单)
我想将所有订单计数的用户列表显示为订单(仅成功订单的订单计数)
我写这个 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 或 null(用户没有任何订单)在结果的订单列中显示 0 计数
提前致谢
解决方案
将条件移至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
推荐阅读
- python - 如何使用 r 或 python 在 google sheet 中编写公式?
- security - 如何禁用对 3DES 密码套件的 TLS/SSL 支持?
- pyspark - 在 python 代码中添加 spark 命令的位置
- mysql - Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录
- javascript - 是否有应用程序脚本功能将活动仪表板中存在的查看器信息导出到单独的 GSheet 中?
- javascript - 浏览器不会使用 Fetch 自动为 FormData 设置请求内容类型标头
- html - 如何使用 react-pdf 库绘制图表
- laravel - laravel 从子关系中获取父数据
- c# - 只读取数据表中的一行
- sql - Oracle - 以描述性方式跟踪对行所做更改的工具