#mysql #sql #sum #aggregate-functions
#mysql #sql #сумма #агрегатные функции
Вопрос:
Я пытаюсь составить эту сумму, но результат странный!
Структура таблицы: solde_user
id int(10)
date datetime
solde varchar(50) latin1_swedish_ci
id_user int(10°
Данные внутри
-------- --------------------- ---------- ---------
| id | date | solde | id_user |
-------- --------------------- ---------- ---------
| 127536 | 2020-12-15 03:26:02 | 465.0700 | 102 |
| 127311 | 2020-12-14 03:26:02 | 465.0700 | 102 |
-------- --------------------- ---------- ---------
мой запрос
SELECT * FROM `solde_user` WHERE id_user = 102 ORDER BY date DESC LIMIT 1
Возврат
-------- --------------------- ---------- ---------
| id | date | solde | id_user |
-------- --------------------- ---------- ---------
| 127536 | 2020-12-15 03:26:02 | 465.0700 | 102 |
-------- --------------------- ---------- ---------
если я напишу этот запрос
SELECT id_user, SUM(solde) as sum FROM `solde_user` WHERE id_user = 102 ORDER BY date DESC LIMIT 1
возврат такой странный — ПОЧЕМУ ??!!!!
--------- --------------------
| id_user | sum |
--------- --------------------
| 102 | 405292.13999999996 |
--------- --------------------
Возврат будет таким же, если я установлю ограничение на 2
Я не понимаю, почему ??? 🙁
Комментарии:
1. Первое, что вы должны узнать, это как использовать SUM() . Конечно, это даст вам тот же ответ. Он суммирует все строки в таблице. Независимо от того, какое ограничение вы установили, оно вернет только 1 строку.
2. «Странное поведение с SUM ()» В поведении нет ничего странного. Это работает так, как и ожидалось.
3. Каков ваш ожидаемый результат?
Ответ №1:
Во-первых, вам нужно group by
предложение, чтобы сделать ваш код допустимым агрегирующим запросом. Тогда вы не должны хранить числа в виде строк. Наконец, order by
и limit
это имеет мало смысла в вашем контексте. Он применяется после агрегирования, в то время как ваш код должен возвращать не более одной строки.
SELECT id_user, SUM(solde 0) as sum_solde
FROM `solde_user`
WHERE id_user = 102
GROUP BY id_user
solde 0
принудительное преобразование в число.