Я пытаюсь получить сумму столбца емкости последних 4 строк таблицы в MySQL.

Моя таблица:

enter image description here

Мой SQL:

SELECT
tid,
sum(capacity)
FROM captable 
ORDER BY tid DESC LIMIT 4

Результат дает другую сумму. Должно быть 150+200+250+300 = 900.

enter image description here

Я ищу сумму чисел, обведенных красным кружком.

-1
ivbtar 18 Янв 2022 в 18:27
Есть ли у вас какой-либо шаблон для определения последних 4 записей?
 – 
Jim Macaulay
18 Янв 2022 в 18:36
В вашем запросе есть сумма 4 требуемых значений, а также tid — какое именно значение tid вы хотели бы здесь увидеть и почему?
 – 
Stu
18 Янв 2022 в 18:44

3 ответа

Лучший ответ

Вы можете заказать с помощью подзапроса и применить SUM во внешнем запросе. Этот запрос учитывает, что tid имеет значение auto_inrement:

SELECT sum(t1.capacity)
FROM ( SELECT tid,capacity
       FROM captable
       ORDER BY  tid DESC LIMIT 4
      ) as t1 ;

Результат:

last_4_rows_sum
900

Демо:

1
Ergest Basha 18 Янв 2022 в 18:45

Вы можете использовать подзапрос,


SELECT tid,
sum(capacity)
from
(SELECT
tid,
capacity
FROM captable 
ORDER BY tid DESC LIMIT 4) tbl;

Вы также можете использовать row_number(), если это необходимо,

SELECT tid,
sum(capacity)
from
(SELECT
tid,
capacity,
row_number() over(order by capacity desc) as rnk
FROM captable) tbl where rnk between 1 and 4;
1
Jim Macaulay 18 Янв 2022 в 18:37
Привет, Джим, первый решил мою проблему. Большое спасибо.
 – 
ivbtar
18 Янв 2022 в 19:05

Вы указали tid, sum(capacity) в своем операторе SELECT, что означает, что вы получите сумму для каждого существующего tid.

Поскольку каждый tid, по-видимому, существует только один раз в вашем наборе данных (по крайней мере, на вашем изображении), я предполагаю, что вы получаете те же значения, возвращаемые из таблицы.

Если вас интересует сумма, независимо от того, какой tid, просто удалите столбец tid из оператора, например:

SELECT
sum(capacity)
FROM captable 
ORDER BY tid DESC LIMIT 4
0
Alex Gru 18 Янв 2022 в 18:38