MySQL - найти MAX сгруппированной суммы (без ограничения)

0

Я хотел бы получить 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;
Теги:

1 ответ

2
Лучший ответ

Хорошо, вы можете упростить свой запрос до

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
  )
  • 0
    Хотя он по-прежнему использует LIMIT, он выполняет цель, которую я хочу достичь. Спасибо :)
  • 1
    Ну, я предполагаю, что вы имеете в виду, что ваш LIMIT не работал, не то, что это было запрещено

Ещё вопросы

Сообщество Overcoder
Наверх
Меню