MySQL - 查找分组总和的最大值(无限制)

标签 mysql

我想获取总金额最大的用户的user_id和总金额。我无法使用 LIMIT,因为这只会返回 1 条记录(多个用户的总金额可能相同)

这是我的数据架构和一些记录

CREATE TABLE transactions (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  user_id BIGINT(20) NOT NULL, 
  amount FLOAT NOT NULL, PRIMARY KEY (id)
);

INSERT INTO transactions (user_id, amount) VALUES 
(1, 1000),
(1, 1000),
(1, 1000),
(2, 2000),
(2, 1000),
(3, 1000);

这是预期的结果。

+---------+------+
| user_id | sum  |
+---------+------+
|       1 | 3000 |
|       2 | 3000 |
+---------+------+

我可以使用下面的sql得到上面的结果。但是,我不知道是否有更好的方法。是否有必要重复同一个子查询两次?谢谢。

SELECT T1.user_id, T1.sum
FROM (
  SELECT user_id, SUM(amount) as sum
  FROM transactions
  GROUP BY user_id
) T1
WHERE T1.sum = (
  SELECT MAX(T2.sum)
  FROM (
    SELECT user_id, SUM(amount) as sum
    FROM transactions
    GROUP BY user_id
  ) T2
)
GROUP BY T1.user_id;

最佳答案

那么您可以将查询简化为

SELECT user_id, SUM(amount) as sum
FROM transactions
GROUP BY user_id
HAVING SUM(amount) = (      
  SELECT SUM(amount) as sum
  FROM transactions
  GROUP BY user_id
  ORDER BY SUM(amount) DESC 
  LIMIT 1
  )

关于MySQL - 查找分组总和的最大值(无限制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49838518/

相关文章:

javascript - 从 Excel 读取并创建图表

sql - 什么时候使用内连接,什么时候使用子查询?

php - MySQL - 提取非现有 ID 的替代方法

MySQL - 删除表时索引会被删除吗?

mysql - 在 MySql 中使用注释 @Inheritance 时出现 Hibernate MappingException

mysql - 按 RAND() LIMIT 100 更新订单

mysql - DB 切换到 Idle 状态后出现错误 PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR

PHP Laravel : How to Avoid duplicate data while importing xl/csv into mysql?

mysql - 从 2 个表中提取数据

MySQL 计算数据透视表中至少有一条记录的所有记录