简体   繁体   English

MySQL与MAX的分组不能按预期工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM