Czasami może być konieczne wybranie wielu zliczeń w jednym zapytaniu, uzyskanie wielu zliczeń dla różnych warunków lub wybranie wielu zliczeń z różnymi kryteriami. W tym artykule przyjrzymy się, jak uzyskać wiele zliczeń za pomocą pojedynczego zapytania w MySQL.
Jak uzyskać wiele zliczeń za pomocą jednego zapytania w MySQL
Załóżmy, że masz następującą tabelę sprzedaż_produktów(id, produkt, data_zamówienia, kwota)
mysql> create table product_sales(
id int,
product varchar(10),
order_date date,
amount int
);
mysql> insert into product_sales(id, product, order_date, amount)
values(1, 'A', '2021-01-01', 250),
(2, 'B', '2021-01-02', 200),
(3, 'A', '2021-01-03', 150),
(4, 'B', '2021-01-04', 250);
mysql> select * from product_sales;
+------+---------+------------+--------+
| id | product | order_date | amount |
+------+---------+------------+--------+
| 1 | A | 2021-01-01 | 250 |
| 2 | B | 2021-01-02 | 200 |
| 3 | A | 2021-01-03 | 150 |
| 4 | B | 2021-01-04 | 250 |
+------+---------+------------+--------+ Powiedzmy, że chcesz mieć całkowitą liczbę, liczbę zamówień produktu A i liczbę zamówień produktu B w jednym zapytaniu.
Oto zapytanie SQL do wykonania powyższego.
mysql> select count(*) as total_count,
count(if(product='A',1,null)) as A_count,
count(if(product='B',1,null)) as B_count
from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
| 4 | 2 | 2 |
+-------------+---------+---------+
Przyjrzyjmy się szczegółowo powyższemu zapytaniu.
liczba(*) zlicza wszystkie wiersze w tabeli, aby uzyskać całkowitą liczbę.
count(if(product=’A’,1,null)) jako A_count – gdy użyjemy warunku IF w funkcji count, zliczy ona tylko wiersze, w których warunek jest prawdziwy. Naszym warunkiem jest dopasowanie wierszy, w których produkt =A. Tak więc MySQL liczy tylko te wiersze, w których produkt jest A. W przeciwnym razie nie jest liczony (przypisany jako NULL).
Pamiętaj, że ważne jest, aby użyć null w przypadku, gdy warunek JEŻELI nie powiedzie się, w przeciwnym razie liczone są nawet niepasujące wiersze.
Podobnie obliczamy liczbę wierszy, w których produkt=B
Możesz również uzyskać powyższy wynik za pomocą instrukcji CASE, jak pokazano poniżej.
mysql> select count(*) as total_count, count(case when product='A' then 1 else null end) as A_count, count(case when product='B' then 1 else null end) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 2 | +-------------+---------+---------+
Potrzebujesz narzędzia do raportowania dla MySQL? Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!