Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrere Zählungen mit unterschiedlichen Bedingungen in einer einzigen MySQL-Abfrage

Mit IF- oder CASE-Anweisungen können Sie in einer einzigen Abfrage in MySQL problemlos mehrere Zählungen mit unterschiedlichen Bedingungen oder Kriterien erhalten. In diesem Artikel sehen wir uns an, wie man in MySQL mehrere Zählungen mit mehreren Bedingungen erhält.


Mehrere Zählungen mit unterschiedlichen Bedingungen in einer einzigen MySQL-Abfrage

Hier sind die Schritte, um mehrere Zählungen mit unterschiedlichen Bedingungen in einer einzigen MySQL-Abfrage zu erhalten.

Nehmen wir an, Sie haben die folgende Tabelle product_sales(id, product, order_date, amount)

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 |
+------+---------+------------+--------+

Angenommen, Sie möchten die Gesamtanzahl, die Anzahl der Bestellungen für Produkt A und die Anzahl der Bestellungen für Produkt B mit einem Betrag> 200 in einer einzigen Abfrage.

Hier ist die SQL-Abfrage, um das Obige zu erreichen.

mysql> select count(*) as total_count,
        count(if(product='A',1,null)) as A_count,
        count(if(product='B' and amount>200,1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       1 |
+-------------+---------+---------+

Sehen wir uns die obige Abfrage im Detail an.

count(*) zählt alle Zeilen in der Tabelle, um die Gesamtzahl zu erhalten.

count(if(product=’A’,1,null)) as A_count – Wenn wir eine IF-Bedingung innerhalb der Zählfunktion verwenden, werden nur Zeilen gezählt, bei denen die Bedingung wahr ist. Unsere Bedingung ist, Zeilen zu finden, in denen Produkt =A ist. MySQL zählt also nur die Zeilen, in denen Produkt A ist. Andernfalls wird es nicht gezählt (als NULL zugewiesen).

Bitte beachten Sie, dass es wichtig ist, null zu verwenden falls die IF-Bedingung fehlschlägt, werden auch nicht übereinstimmende Zeilen gezählt.

In ähnlicher Weise berechnen wir die Anzahl für Zeilen, in denen Produkt =B und Betrag> 200 ist.

Sie können das obige Ergebnis auch mit der CASE-Anweisung erhalten, wie unten gezeigt.

mysql> select count(*) as total_count,
 count(case when product='A' then 1 else null end) as A_count,
 count(case when product='B' and amount>200 then 1 else null end) as B_count
 from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       1 |
+-------------+---------+---------+

Bonuslektüre:Wie man COALESCE in MySQL verwendet


Erhalte mehrere Zählungen in Ubiq

Das Ubiq Reporting Tool unterstützt alle oben genannten SQL-Abfragen und macht es einfach, SQL-Ergebnisse auf unterschiedliche Weise zu visualisieren. Es ermöglicht Ihnen auch, Dashboards und Diagramme aus MySQL-Daten zu erstellen. Hier ist die oben erwähnte SQL-Abfrage in Ubiq.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!