-- id user_id amount-- 解法1SELECT*FROM orders
where amount in(SELECTMAX(amount)as max_amount FROM orders GROUPBY user_id
)GROUPBY user_id;-- 解法2SELECT*FROM orders a INNERJOIN(SELECT user_id,MAX(amount)as max_amount FROM orders GROUPBY user_id
) b on a.user_id=b.user_id and a.amount=b.max_amount
GROUPBY a.user_id;-- 解法3-- mysql 8 以上用窗口函数SELECT*FROM(SELECT*,rank()OVER(PARTITIONby user_id ORDERBY amount desc)as`rank`FROM orders ) a
where a.rank=1;
这里考察的是先排序分组的问题,mysql默认分组是已经排序的了,是升序,这里明显要降序
SELECT
id,
user_id,
account
FROM
(
SELECT
*
FROM
order
ORDER BY
account desc
LIMIT 100
) as t1
GROUP BY
user_id
高认可度评论:
楼上都都不对哈,group by 出来的id都是最小的那一个
楼上都都不对哈,group by 出来的id都是最小的那一个
SELECT * FROM orders WHERE amount in (SELECT max(amount) FROM orders GROUP BY user_id );
SELECT id,user_id, max(amount) FROM table GROUP BY user_id
MySQL8.0+ 使用窗口函数
这个问题涉及的知识点,分组中取最大、最小记录
这里考察的是先排序分组的问题,mysql默认分组是已经排序的了,是升序,这里明显要降序 SELECT id, user_id, account FROM ( SELECT * FROM
order
ORDER BY account desc LIMIT 100 ) as t1 GROUP BY user_id