# # SELECT ... WITH ROLLUP # # https://mariadb.com/kb/en/select-with-rollup/ # # # Author: Susil, susil.behera@mariadb.com # # -- source ../include/have_columnstore.inc --disable_warnings DROP DATABASE IF EXISTS mcs84_db; --enable_warnings CREATE DATABASE mcs84_db; USE mcs84_db; CREATE TABLE booksales ( country CHAR(35), genre CHAR(15), year INT, sales INT) ENGINE=Columnstore; 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); SELECT year, SUM(sales) FROM booksales GROUP BY year ORDER BY year; # Negative. WITH ROLLUP cannot be used with ORDER BY. --error 1221 SELECT year, SUM(sales) FROM booksales GROUP BY year WITH ROLLUP ORDER BY year; --sorted_result SELECT year, sales, MAX(country) FROM booksales GROUP BY year, sales; --sorted_result SELECT year, MAX(country) FROM booksales GROUP BY year; --sorted_result SELECT year, sales, MAX(country) FROM booksales GROUP BY year, sales WITH ROLLUP; --sorted_result SELECT year, SUM(sales) FROM booksales GROUP BY year WITH ROLLUP; --sorted_result SELECT country, genre, SUM(sales) FROM booksales GROUP BY country, genre WITH ROLLUP; --sorted_result SELECT country, genre, SUM(sales) FROM (SELECT country, genre, sales FROM booksales) t1 GROUP BY country, genre WITH ROLLUP; CREATE TABLE three_cols ( key1 INTEGER, key2 INTEGER, value DECIMAL(38)) ENGINE=COLUMNSTORE; INSERT INTO three_cols(key1, key2, value) VALUES (NULL, NULL, NULL) , (NULL, NULL, 1) , (NULL, 1, 2) , ( 1, 1, 3) , ( 1, 2, 4) , ( 1, 2, 5) , ( 2, 3, 6) , ( 2, 3, 7); --sorted_result SELECT key1, key2, SUM(value), AVG(value), MIN(value), MAX(value), COUNT(value), COUNT(*) FROM three_cols GROUP BY key1, key2 WITH ROLLUP; --error 1815 SELECT key1, key2, GROUP_CONCAT(value) FROM three_cols GROUP BY key1, key2 WITH ROLLUP; --error 1815 SELECT key1, key2, JSON_ARRAYAGG(value) FROM three_cols GROUP BY key1, key2 WITH ROLLUP; --error 1815 SELECT 100, SUM(value) FROM three_cols GROUP BY 1 WITH ROLLUP; # Clean up DROP DATABASE IF EXISTS mcs84_db;