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