left join count忽略来自计数的左表列

ufj5ltwl  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(379)

我有两张table…第一张有 order_id , order_status ,和 user_id .... 第二张table有 order_id ,和 product_id , product_quantity 就像下面一样
第一张table

order_id | order_status | user_id
    ----------------------------
    1        | 5            | 2
    2        | 1            | 1
    3        | 5            | 1
    4        | 5            | 1

第二张table

order_id | product_id | quantity
----------------------------
1        | 200        | 4
2        | 201        | 2
2        | 200        | 1
2        | 207        | 4
3        | 201        | 1
3        | 200        | 6
4        | 201        | 8

我想得到

user_id | Total_orders | quantity
    ----------------------------
    1       | 2            | 15
    2       | 1            | 4

获取用户标识,其中订单状态为5,按用户标识分组求和(数量)
我的尝试

SELECT h.user_id
     , COUNT(IF(h.order_status = 5,1,0)) AS total_orders
     , SUM(o.quantity) AS quantity 
  FROM table1 h 
  LEFT 
  JOIN table2 o  
    ON o.order_id = h.order_id 
 WHERE h.order_status = 5 
 GROUP 
    BY h.user_id

但是,它给出了计算左表中order\u id的所有示例的结果,比如。。。状态为5的用户\u id 1的订单总数为2,但我的查询返回3作为计数( order_id )bcz用户id 1传递的订单有3个示例。
任何建议或解决方案…我被困很久了:(
谢谢

e5nqia27

e5nqia271#

您需要计算 order_id :

SELECT h.user_id, 
       COUNT(DISTINCT h.order_id) AS total_orders, 
       SUM(o.quantity) AS quantity 
FROM table1 h 
LEFT JOIN table2 o ON o.order_id=h.order_id 
WHERE h.order_status = 5 
GROUP BY h.user_id

另外,使用 IF 内部功能 COUNT 这样地:

COUNT(IF(h.order_status = 5,1,0)) AS total_orders

从那以后就没有意义了 h.order_status 总是等于5,因为 WHERE 条款:

WHERE h.order_status = 5

此处演示

相关问题