Лекция
Привет, сегодня поговорим про нарастающий итог 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)