mysql如何查询每个用户消费金额最大的记录

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

1. 表结构及数据就是这样

怎么用一条sql语句查询每个用户消费金额最大的记录
mysql如何查询每个用户消费金额最大的记录

讨论数量: 25

楼上都都不对哈,group by 出来的id都是最小的那一个

select o.* from orders o where amount = (select max(amount)  from orders where uid = o.uid)
2年前 评论
被困群众 (楼主) 2年前
GDDD 2年前
xavierF (作者) 2年前
xavierF (作者) 2年前
被困群众 (楼主) 2年前
PHPer技术栈 2年前
王小大 2年前
kongxueding 2年前
select user_id, max(amount) from table group by user_id
2年前 评论
被困群众 (楼主) 2年前
喝卵形 (作者) 2年前
游离不2 2年前
select * from table group by user_id order by amount desc limit 1
2年前 评论

楼上都都不对哈,group by 出来的id都是最小的那一个

select o.* from orders o where amount = (select max(amount)  from orders where uid = o.uid)
2年前 评论
被困群众 (楼主) 2年前
GDDD 2年前
xavierF (作者) 2年前
xavierF (作者) 2年前
被困群众 (楼主) 2年前
PHPer技术栈 2年前
王小大 2年前
kongxueding 2年前
select o.* from orders o RIGHT JOIN (SELECT max(amount) mxa,user_id FROM orders GROUP BY user_id) m on o.user_id=m.user_id and o.amount=m.mxa
2年前 评论
angelo 2年前

SELECT * FROM orders WHERE amount in (SELECT max(amount) FROM orders GROUP BY user_id );

2年前 评论

SELECT id,user_id, max(amount) FROM table GROUP BY user_id

2年前 评论
游离不2

MySQL8.0+ 使用窗口函数

2年前 评论
 SELECT user_id,  MAX(amount) as max_amount
 FROM table_name
 GROUP BY user_id
 ORDER BY amount DESC;
2年前 评论
JaguarJack
select max(amount), user_id from amount GROUP BY user_id
2年前 评论
第五焱陽
SELECT
    *
FROM
    orders 
WHERE
    amount IN ( SELECT max( amount ) FROM orders GROUP BY user_id );
2年前 评论
-- id user_id amount
-- 解法1
SELECT * FROM  orders 
where amount in (
SELECT MAX(amount) as max_amount FROM orders GROUP BY user_id 
) GROUP BY user_id;

-- 解法2
SELECT * FROM  orders  a INNER JOIN
(
SELECT user_id, MAX(amount) as max_amount FROM orders GROUP BY user_id 
) b  on a.user_id=b.user_id and a.amount=b.max_amount
GROUP BY a.user_id;

-- 解法3
-- mysql 8 以上用窗口函数
SELECT * FROM 
(SELECT *,rank() OVER (PARTITION by user_id ORDER BY amount desc ) as `rank` FROM orders ) a
where a.rank=1;
2年前 评论
梦想止于行动

这里考察的是先排序分组的问题,mysql默认分组是已经排序的了,是升序,这里明显要降序 SELECT id, user_id, account FROM ( SELECT * FROM order ORDER BY account desc LIMIT 100 ) as t1 GROUP BY user_id

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!