[英]MySQL group by with MAX not working as expected?
I have a table: 我有一张桌子:
ID | User | Amount
1 | 1 | 50
2 | 1 | 80
3 | 2 | 80
4 | 2 | 100
5 | 1 | 90
6 | 1 | 120
7 | 2 | 120
8 | 1 | 150
9 | 2 | 300
I do a query: 我查询:
SELECT * FROM TABLE ORDER BY amount DESC group by userid
I'm getting this: 我得到这个:
ID | User | Amount
1 | 1 | 50
2 | 1 | 80
But I was expecting: 但是我期待着:
ID | User | Amount
9 | 2 | 300
8 | 1 | 150
What is wrong with my sql? 我的SQL有什么问题?
When grouping you have to use aggregate functions like max()
for all columns that are not grouped by 分组时,必须对所有未按分组的列使用诸如
max()
类的聚合函数
select t.*
from table t
inner join
(
SELECT userid, max(amount) as total
FROM TABLE
group by userid
) x on x.userid = t.userid and x.total = t.amount
ORDER BY t.amount DESC
Another solution.Check SQL Fiddle Using FIND_IN_SET
clause 另一种解决方案。使用
FIND_IN_SET
子句检查SQL Fiddle
SELECT
ua.*
FROM user_amount ua
WHERE FIND_IN_SET(ua.amount,(SELECT
MAX(ua1.amount)
FROM user_amount ua1
WHERE ua1.user = ua.user)) > 0
ORDER BY amount desc;
Using IN
clause 使用
IN
子句
SELECT
ua.*
FROM user_amount ua
WHERE ua.amount IN (SELECT
MAX(ua1.amount)
FROM user_amount ua1
WHERE ua1.user = ua.user)
ORDER BY amount desc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.