ВЫБОР С ROLLUP
Синтаксис
См. ВЫБОР для полного синтаксиса.
Описание
Модификатор WITH ROLLUP добавляет дополнительные строки в результат, которые представляют обобщенные сводные данные. Сводный столбец представлен значением NULL. Если есть несколько столбцов агрегирования GROUP BY, будут добавлены несколько агрегированных строк.
Оператор LIMIT может быть использован одновременно и применяется после того, как строки WITH ROLLUP были добавлены.
WITH ROLLUP нельзя использовать с ORDER BY. Некоторая сортировка всё же возможна с использованием ASC или DESC с столбцом GROUP BY, хотя строки сводных данных всегда добавляются в конце.
Примеры
В этих примерах используется следующая таблица-пример
CREATE TABLE booksales (
country VARCHAR(35), genre ENUM('fiction','non-fiction'), year YEAR, sales INT);
INSERT INTO booksales VALUES
('Senegal','fiction',2014,12234), ('Senegal','fiction',2015,15647),
('Senegal','non-fiction',2014,64980), ('Senegal','non-fiction',2015,78901),
('Paraguay','fiction',2014,87970), ('Paraguay','fiction',2015,76940),
('Paraguay','non-fiction',2014,8760), ('Paraguay','non-fiction',2015,9030);
Добавление модификатора WITH ROLLUP в этом примере добавляет дополнительную строку, которая агрегирует оба года:
SELECT year, SUM(sales) FROM booksales GROUP BY year; +------+------------+ | year | SUM(sales) | +------+------------+ | 2014 | 173944 | | 2015 | 180518 | +------+------------+ 2 rows in set (0.08 sec) SELECT year, SUM(sales) FROM booksales GROUP BY year WITH ROLLUP; +------+------------+ | year | SUM(sales) | +------+------------+ | 2014 | 173944 | | 2015 | 180518 | | NULL | 354462 | +------+------------+
В следующем примере каждый раз, когда изменяется жанр, год или страна, добавляется еще одна строка сводных данных:
SELECT country, year, genre, SUM(sales) FROM booksales GROUP BY country, year, genre; +----------+------+-------------+------------+ | country | year | genre | SUM(sales) | +----------+------+-------------+------------+ | Paraguay | 2014 | fiction | 87970 | | Paraguay | 2014 | non-fiction | 8760 | | Paraguay | 2015 | fiction | 76940 | | Paraguay | 2015 | non-fiction | 9030 | | Senegal | 2014 | fiction | 12234 | | Senegal | 2014 | non-fiction | 64980 | | Senegal | 2015 | fiction | 15647 | | Senegal | 2015 | non-fiction | 78901 | +----------+------+-------------+------------+ SELECT country, year, genre, SUM(sales) FROM booksales GROUP BY country, year, genre WITH ROLLUP; +----------+------+-------------+------------+ | country | year | genre | SUM(sales) | +----------+------+-------------+------------+ | Paraguay | 2014 | fiction | 87970 | | Paraguay | 2014 | non-fiction | 8760 | | Paraguay | 2014 | NULL | 96730 | | Paraguay | 2015 | fiction | 76940 | | Paraguay | 2015 | non-fiction | 9030 | | Paraguay | 2015 | NULL | 85970 | | Paraguay | NULL | NULL | 182700 | | Senegal | 2014 | fiction | 12234 | | Senegal | 2014 | non-fiction | 64980 | | Senegal | 2014 | NULL | 77214 | | Senegal | 2015 | fiction | 15647 | | Senegal | 2015 | non-fiction | 78901 | | Senegal | 2015 | NULL | 94548 | | Senegal | NULL | NULL | 171762 | | NULL | NULL | NULL | 354462 | +----------+------+-------------+------------+
Оператор LIMIT, применяемый после WITH ROLLUP:
SELECT country, year, genre, SUM(sales) FROM booksales GROUP BY country, year, genre WITH ROLLUP LIMIT 4; +----------+------+-------------+------------+ | country | year | genre | SUM(sales) | +----------+------+-------------+------------+ | Paraguay | 2014 | fiction | 87970 | | Paraguay | 2014 | non-fiction | 8760 | | Paraguay | 2014 | NULL | 96730 | | Paraguay | 2015 | fiction | 76940 | +----------+------+-------------+------------+
Сортировка по году по убыванию:
SELECT country, year, genre, SUM(sales) FROM booksales GROUP BY country, year DESC, genre WITH ROLLUP; +----------+------+-------------+------------+ | country | year | genre | SUM(sales) | +----------+------+-------------+------------+ | Paraguay | 2015 | fiction | 76940 | | Paraguay | 2015 | non-fiction | 9030 | | Paraguay | 2015 | NULL | 85970 | | Paraguay | 2014 | fiction | 87970 | | Paraguay | 2014 | non-fiction | 8760 | | Paraguay | 2014 | NULL | 96730 | | Paraguay | NULL | NULL | 182700 | | Senegal | 2015 | fiction | 15647 | | Senegal | 2015 | non-fiction | 78901 | | Senegal | 2015 | NULL | 94548 | | Senegal | 2014 | fiction | 12234 | | Senegal | 2014 | non-fiction | 64980 | | Senegal | 2014 | NULL | 77214 | | Senegal | NULL | NULL | 171762 | | NULL | NULL | NULL | 354462 | +----------+------+-------------+------------+
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/select-with-rollup/