Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak korzystać z pakietu zbiorczego MySQL

Czasami może być konieczne obliczenie sum i podsum w MySQL lub dodanie wierszy sum do danych. Agregacja danych za pomocą zestawienia UNION może być żmudna, zwłaszcza w celu obliczenia sum częściowych. MySQL Rollup jest odpowiedni do takich przypadków użycia. Oto jak używać MySQL Rollup do obliczania sumy całkowitej i sumy częściowej w MySQL.

Jak używać pakietu zbiorczego MySQL

Oto kroki, aby obliczyć sumę całkowitą i sumę częściową za pomocą pakietu zbiorczego MySQL.

MySQL Rollup umożliwia łatwe zestawianie danych i obliczanie sum częściowych za pomocą jednego polecenia. Możesz go również użyć do dodania wierszy sum i sum częściowych do danych, zamiast obliczania ich osobno i łączenia wyniku za pomocą instrukcji UNION.

Oto składnia MySQL ROLLUP.

SELECT 
    column1, column2, column3, ...
FROM 
    table_name
GROUP BY
    column1, column2,... WITH ROLLUP;

Powyższe zapytanie jest bardzo podobne do agregowania danych przy użyciu instrukcji GROUP BY, z tą różnicą, że dodajesz słowo kluczowe WITH ROLLUP po klauzuli GROUP BY.

W powyższym zapytaniu określamy kolumny, które musimy wyświetlić w wyniku zapytania w klauzuli SELECT. Musimy również wspomnieć o nazwie tabeli. W klauzuli GROUP BY określamy kolumny, na podstawie których chcemy agregować dane.

Przeczytaj bonus:Jak sprawdzić wersję MySQL

Załóżmy, że masz następującą tabelę sprzedaży (data_zamówienia, sprzedaż).

mysql> create table sales(order_date date,sale int);
 
mysql> insert into sales values('2020-01-01',20),
('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),
('2020-02-05',20),('2020-02-10',20),('2020-02-06',25),
('2020-03-07',15),('2020-03-08',30),('2020-03-09',20);
 
mysql> select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   20 |
| 2020-01-02 |   25 |
| 2020-01-03 |   15 |
| 2020-01-04 |   30 |
| 2020-02-05 |   20 |
| 2020-02-10 |   20 |
| 2020-02-06 |   25 |
| 2020-03-07 |   15 |
| 2020-03-08 |   30 |
| 2020-03-09 |   20 |
+------------+------+

Przeczytaj bonus:Jak wyłączyć sprawdzanie klucza obcego w MySQL

Oto zapytanie SQL dla pakietu zbiorczego MySQL w celu obliczenia wartości całkowitych i dodania wiersza sumy do tabeli. Suma końcowa jest zawsze dodawana jako ostatni wiersz, a kolumna GROUP BY ma przypisaną wartość NULL.

mysql> select * from sales 
       group by order_date with rollup;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   20 |
| 2020-01-02 |   25 |
| 2020-01-03 |   15 |
| 2020-01-04 |   30 |
| 2020-02-05 |   20 |
| 2020-02-06 |   25 |
| 2020-02-10 |   20 |
| 2020-03-07 |   15 |
| 2020-03-08 |   30 |
| 2020-03-09 |   20 |
| NULL       |   20 |
+------------+------+

W powyższym zapytaniu ROLLUJEMY do data_zamówienia kolumna.

Przeczytaj bonus:Jak tworzyć sekwencję w MySQL

Jeśli określisz więcej niż jedną kolumnę w klauzuli GROUP BY, MySQL przyjmie hierarchię między nimi i odpowiednio dane zestawienia.

Na przykład, jeśli wspomnisz

GROUP BY c1, c2, c3 WITH ROLLUP

wtedy MySQL przyjmie

c1 > c2 > c3

Dlatego ważne jest, aby uważać na kolejność kolumn w klauzuli GROUP BY podczas korzystania z MySQL Rollup. Załóżmy, że masz poniższą tabelę.

mysql> create table sales(product varchar(255),order_date date,sale int);

mysql> insert into sales values('A','2020-01-01',20),('B','2020-01-02',25),
('B','2020-01-03',15),('A','2020-01-04',30),('A','2020-01-05',20);

mysql> select * from sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-01-01 |   20 |
| B       | 2020-01-02 |   25 |
| B       | 2020-01-03 |   15 |
| A       | 2020-01-04 |   30 |
| A       | 2020-01-05 |   20 |
+---------+------------+------+

Przeczytaj bonus:Jak porównać dwie tabele w MySQL

Oto zapytanie SQL do zestawienia danych według kolumn produktu i daty_zamówienia. W takim przypadku MySQL nie tylko obliczy sumę końcową i wyświetli na końcu, ale także obliczy podsumy dla każdej kolumny wymienionej w klauzuli GROUP BY z wyjątkiem ostatniej, czyli tylko produktu kolumna.

mysql> select product,order_date,sum(sale) 
       from sales group by product,order_date with rollup;
+---------+------------+-----------+
| product | order_date | sum(sale) |
+---------+------------+-----------+
| A       | 2020-01-01 |        20 |
| A       | 2020-01-04 |        30 |
| A       | 2020-01-05 |        20 |
| A       | NULL       |        70 |
| B       | 2020-01-02 |        25 |
| B       | 2020-01-03 |        15 |
| B       | NULL       |        40 |
| NULL    | NULL       |       110 |
+---------+------------+-----------+

W powyższym wyniku zobaczysz sumy produktów i sumę końcową wyróżnione jako pogrubione

Oto wynik, jeśli wymienisz order_date, a następnie kolumnę produktu w klauzuli GROUP BY. W takim przypadku MySQL obliczy sumę i sumę całkowitą według daty zamówienia.

mysql> select product,order_date,sum(sale) 
       from sales group by order_date,product with rollup;	   

+---------+------------+-----------+
| product | order_date | sum(sale) |
+---------+------------+-----------+
| A       | 2020-01-01 |        20 |
| NULL    | 2020-01-01 |        20 |
| B       | 2020-01-02 |        25 |
| NULL    | 2020-01-02 |        25 |
| B       | 2020-01-03 |        15 |
| NULL    | 2020-01-03 |        15 |
| A       | 2020-01-04 |        30 |
| NULL    | 2020-01-04 |        30 |
| A       | 2020-01-05 |        20 |
| NULL    | 2020-01-05 |        20 |
| NULL    | NULL       |       110 |
+---------+------------+-----------+

Jak widać wyniki są różne, jeśli zmienisz kolejność kolumn wymienionych w klauzuli GROUP BY. Niemniej jednak, ROLLUP MySQL jest bardzo wygodnym sposobem szybkiego obliczania sum częściowych i dodawania wierszy całkowitych w MySQL.

Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL GROUP BY różni się od MySQL?

  2. Błąd MySQL #1071 — Określony klucz był za długi; maksymalna długość klucza to 767 bajtów

  3. Błąd krytyczny:wywołanie niezdefiniowanej funkcji mysqli_result()

  4. Jak ustawić zestaw znaków i sortowanie tabeli w MySQL?

  5. Odmowa dostępu dla użytkownika „[chroniony adres e-mail]” (przy użyciu hasła:NIE)