gpt4 book ai didi

mysql - 如何避免截然不同

转载 作者:可可西里 更新时间:2023-11-01 07:37:47 25 4
gpt4 key购买 nike

我有一个在使用 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 列,但大多数情况下它是空的,它们必须通过事件表连接。

编辑:

这些是我编写的简化查询的结果,首先没有 distinct,然后包括 distinct。

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 )

最佳答案

如果一个订单可以关联多个事件,或者一个用户多次关联一个事件,那么同一个订单有可能关联同一个用户多次。在这种情况下,使用 DISTINCT 将只为每个用户计算该订单一次,而省略它将为每个与用户的关联计算该订单一次。

如果您追求前者,那么您现有的查询是您的最佳选择。

关于mysql - 如何避免截然不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com