gpt4 book ai didi

mysql - 如何在mysql上使用 "group by"之前的 "join"?

转载 作者:可可西里 更新时间:2023-11-01 07:58:27 24 4
gpt4 key购买 nike

我有以下查询,其中包含重复的 user_id。我不想看到一个以上的用户。我决定按以下方式使用 group by:

SELECT u.`ID`, u.`user_login`, u.`user_registered`, u.`display_name` 
FROM purchase_key p
LEFT JOIN users u ON p.user_id = u.id
WHERE ( `product_id` = 1 OR `product_id` = 2 )
AND `create_date` <= '2015-09-20' AND `create_date` >= '2014-09-01'
group by p.user_id order by p.`create_date` asc

但是有没有办法在加入之前进行分组?

最佳答案

不确定为什么要这样做。除非索引非常差,否则它不太可能有助于提高性能。

不确定 LEFT OUTER JOIN 是否有用,因为您的查询返回的唯一字段是来自左连接表的字段。因此,如果某些购买没有找到用户,您只会返回大量空行。

但是执行子查询以获取用户列表,该用户的最大创建日期在要求的日期范围内(虽然对于 MySQL 来说不是绝对必要的,但如果返回不符合条件的字段,大多数 SQL 风格都会出错在 group by 子句中而不是聚合字段),并使用 INNER JOIN 为您提供以下内容:-

SELECT u.ID, u.user_login, u.user_registered, u.display_name 
FROM
(
SELECT user_id, MAX(create_date) AS max_create_date
FROM purchase_key
WHERE product_id IN (1, 2)
AND create_date BETWEEN '2014-09-01' AND '2015-09-20'
GROUP BY user_id
) p
INNER JOIN users u ON p.user_id = u.id
ORDER BY p.max_create_date ASC

关于mysql - 如何在mysql上使用 "group by"之前的 "join"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518500/

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