作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有以下查询,其中包含重复的 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/
我是一名优秀的程序员,十分优秀!