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ś!