mysql – 如何避免分明

我有一个查询,当我使用DISTINCT时.但是我有一种感觉,我可以用一种方式重写查询,这将有助于我避免使用DISTINCT,这将使数据库更容易(更快)处理查询.

如果重写查询没有意义,请解释一下,如果有,请查看简化查询并给我一个提示如何重新制定它,这样我就不会重复了.

SELECT Us.user_id, COUNT( DISTINCT Or.order_id ) AS orders
FROM users AS Us
LEFT JOIN events AS Ev ON Ev.user_id = Us.user_id
LEFT JOIN orders AS Or ON Or.event_id = Ev.event_id
OR Or.user_id = Us.user_id
GROUP BY Us.user_id

查询的简短描述:我有一个用户表,他们的事件和订单.有时订单有列user_id,但大部分都是null,它们必须通过事件表连接.

编辑:

这些是我写的简化查询的结果,首先没有明显的,然后包括不同的.

user_id orders
3952    263
3953    7
3954    2
3955    6
3956    1
3957    0
...

user_id orders
3952    79
3953    7
3954    2
3955    6
3956    1
3957    0
...

问题修正:

SELECT COALESCE( Or.user_id, Ev.user_id ) AS user, COUNT( Or.order_id ) AS orders
FROM orders AS Or
LEFT JOIN events AS Ev ON Ev.event_id = Or.event_id
GROUP BY COALESCE( Or.user_id, Ev.user_id )

最佳答案 您没有从用户表和事件表中获取任何内容,因此为什么要加入它们.您的上一个“OR”子句明确引用它具有user_ID列.我希望你的订单表有一个关于下订单的用户ID的索引,那么你可以这样做

select
      user_id,
      count(*) as Orders
   from
      orders
   group by
      user_id
点赞