Лекция
Привет, сегодня поговорим про нарастающий итог mysql , обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое нарастающий итог mysql , итого для каждого столбца , настоятельно рекомендую прочитать все из категории MySql (Maria DB).
Строку итого или наростающий итог в mysql можно получить так
SELECT DATE(dateadd) dt,
SUM( case when typesite=1 && odobr=1 then 1 else 0 end ) a1,
GROUP_CONCAT( case when odobr=0 then id else NULL end ) as ids,
SUM( case when typesite>0 then 1 else 0 end ) tot,
( SELECT sum( case when typesite>0 then 1 else 0 end ) from bill t where DATE ( t.dateadd) <= DATE ( b.dateadd)) AS incc,
FROM bill b
GROUP BY DATE ( dateadd) DESC
WITH ROLLUP
1. Есть табличка аггрегированая и надо считать нарастающий итог.
ответ- можно напрмер использовать вложенный запрос - не производительно зато наглядно
2.для подсчета итого каждого слолбца используйте WITH ROLLUP
Начиная с MySQL 4.1.1, конструкцию GROUP BY предусматривает модификатор WITH ROLLUP, который добавляет несколько дополнительных строк к итоговому выводу. Эти строки представляют итоговые операции высшего уровня (суперагрегатные). ROLLUP, таким образом, позволяет ответить на вопросы на многих уровнях анализа в пределах одного запроса. Об этом говорит сайт https://intellect.icu . Это может быть использовано, например, для представления поддержки OLAP-операций (Online Analytical Processing - онлайновой аналитической обработки).
Когда вы применяете ROLLUP, вы не можете одновременно использовать конструкцию ORDER BY для сортировки результатов. Другими словами, ROLLUP и ORDER BY являются взаимоисключающими. Однако у вас все же есть определенная возможность повлиять на порядок сортировки. В MySQL конструкция GROUP BY сортирует результаты, и вы можете явно указывать ключевые слова ASC и DESC для столбцов, перечисленных в конструкции GROUP BY, чтобы указать порядок сортировки индивидуальных столбцов.
(Итоговые строки высшего уровня, добавленные ROLLUP, по-прежнему появятся после строк, по которым они вычисляются, независимо от порядка сортировки.)
значения приблизительные
2015-04-09 | 8 | 0 | 242 | 1004 |
2015-04-08 | 10 | 0 | 211 | 874 |
2015-04-07 | 6 | 0 | 222 | 694 |
2015-04-06 | 8 | 0 | 191 | 453 |
2015-04-05 | 1 | 0 | 127 | 234 |
2015-04-04 | 4 | 0 | 147 | 147 |
43 | 0 | 733 | 147 |
но гораздо бысрее будет раз в 10 если использовать переменные пользователя и вложенный запрос один раз
например
SELECT Y.* ,
IF( @s>0, @s ,0) AS incc,
@s:=@s- Y.tot AS tmp
FROM
(
SELECT @s:= SUM( price) a ,DATE(dateadd) dt, SUM( price) tot
FROM bill b
GROUP BY DATE(dateadd) DESC
WITH ROLLUP
) Y
Надеюсь, эта статья про нарастающий итог mysql , была вам полезна, счастья и удачи в ваших начинаниях! Надеюсь, что теперь ты понял что такое нарастающий итог mysql , итого для каждого столбца и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории MySql (Maria DB)
Из статьи мы узнали кратко, но содержательно про нарастающий итог mysqlОтветы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)