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

So erhalten Sie einen Datensatz mit maximalem Wert in MySQL

Oft müssen Sie möglicherweise Zeilen mit dem maximalen Spaltenwert in SQL auswählen. Da es dafür keine integrierte Funktion gibt, müssen Sie Datensätze mit dem maximalen Wert mithilfe einer SQL-Abfrage abrufen. So erhalten Sie einen Datensatz mit maximalem Wert in MySQL. Sie können es auch verwenden, um Zeilen mit maximalem Wert in PostgreSQL, SQL Server zu erhalten.

So erhalten Sie einen Datensatz mit maximalem Wert in MySQL

Hier sind die Schritte, um Datensätze mit maximalem Wert in MySQL zu erhalten.

Nehmen wir an, Sie haben die folgende Tabelle sales(order_date,sale) die tägliche Verkaufsdaten enthält.

mysql> create table sales(order_date date,sale int, orders int);

mysql> insert into sales(order_date,sale,orders) values('2020-05-29', 300, 10),
     ('2020-05-30',250, 15),( '2020-05-31', 250, 12),( '2020-06-01',250, 14),
     ('2020-06-02',150,20),('2020-06-03',300,21),('2020-06-04',200,15),
     ('2020-06-05',200,17),('2020-06-06',250,12),('2020-06-07',150,15),
     ('2020-06-08',300,12),('2020-06-09',200,18);

mysql> select * from sales;
+------------+------+--------+
| order_date | sale | orders |
+------------+------+--------+
| 2020-05-29 |  300 |     10 |
| 2020-05-30 |  250 |     15 |
| 2020-05-31 |  250 |     12 |
| 2020-06-01 |  250 |     14 |
| 2020-06-02 |  150 |     20 |
| 2020-06-03 |  300 |     21 |
| 2020-06-04 |  200 |     15 |
| 2020-06-05 |  200 |     17 |
| 2020-06-06 |  250 |     12 |
| 2020-06-07 |  150 |     15 |
| 2020-06-08 |  300 |     12 |
| 2020-06-09 |  200 |     18 |
+------------+------+--------+

Es gibt zwei Möglichkeiten, Zeilen mit maximalem Spaltenwert in SQL auszuwählen. Wir werden uns beide ansehen.

Bonuslektüre:So erhalten Sie die Daten der letzten 12 Monate in MySQL

So erhalten Sie einen Datensatz mit maximalem Wert mithilfe einer SQL-Unterabfrage

Hier ist die SQL-Abfrage, um Zeilen mit maximalem Verkauf zu erhalten Wert mit SQL-Unterabfrage.

mysql> select * from sales where sale=(select max(sale) from sales);
+------------+------+--------+
| order_date | sale | orders |
+------------+------+--------+
| 2020-05-29 |  300 |     10 |
| 2020-06-03 |  300 |     21 |
| 2020-06-08 |  300 |     12 |
+------------+------+--------+

In der obigen Abfrage wählen wir zuerst den maximalen Wert für die Tabelle in der Unterabfrage (in fett ). Dann wählen wir die Zeilen aus der ursprünglichen Verkaufstabelle aus, in denen der Wert der Verkaufsspalte der maximale Wert ist. Bei großen Tabellen können Sie die Abfrageleistung verbessern, indem Sie sale indizieren Spalte.

Wenn Sie Daten gemäß bestimmten Bedingungen filtern möchten, fügen Sie Ihrer Unterabfrage eine WHERE-Klausel hinzu, wie unten gezeigt.

mysql> select * from sales 
       where sale=(
          select max(sale) from sales
          WHERE <condition>
        );

Bonuslektüre:So aktualisieren Sie die Ansicht in MySQL

So erhalten Sie einen Datensatz mit maximalem Wert für jede GRUPPE

Hier sind die Schritte, um mit GROUP BY in MySQL eine Zeile mit maximalem Wert zu erhalten.

Angenommen, Sie haben eine Tabelle product_sales(product, order_date,sale) die Verkaufsdaten für mehrere Produkte enthält. Und Sie möchten Aufzeichnungen mit dem maximalen Verkaufswert für jedes Produkt erhalten.

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

mysql> insert into product_sales(product,order_date, sale)
     values('A','2020-05-01',250),
     ('B','2020-05-01',350),
     ('C','2020-05-01',1250),
     ('A','2020-05-02',450),
     ('B','2020-05-02',650),
     ('C','2020-05-02',1050),
     ('A','2020-05-03',150),
     ('B','2020-05-03',250),
     ('C','2020-05-03',1850);

mysql> select * from product_sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-05-01 |  250 |
| B       | 2020-05-01 |  350 |
| C       | 2020-05-01 | 1250 |
| A       | 2020-05-02 |  450 |
| B       | 2020-05-02 |  650 |
| C       | 2020-05-02 | 1050 |
| A       | 2020-05-03 |  150 |
| B       | 2020-05-03 |  250 |
| C       | 2020-05-03 | 1850 |
+---------+------------+------+

Bonus-Leseartikel:So erhalten Sie die kumulative Gesamtzahl der Benutzer pro Tag in MySQL

Hier ist die SQL-Abfrage, um mit GROUP BY für jede Gruppe, d. h. jedes Produkt, einen Datensatz mit dem maximalen Wert abzurufen.

mysql> select product_sales.* from product_sales,
      (select product,max(sale) as sale 
           from product_sales 
           group by product) max_sales 
        where product_sales.product=max_sales.product 
        and product_sales.sale=max_sales.sale;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-05-02 |  450 |
| B       | 2020-05-02 |  650 |
| C       | 2020-05-03 | 1850 |
+---------+------------+------+

In der obigen Abfrage berechnen wir zuerst den maximalen Verkaufswert für jedes Produkt mithilfe einer verschachtelten Unterabfrage (in fett ) und verbinden Sie das Ergebnis dann mit dem ursprünglichen product_sales Tabelle basierend auf Produkt- und Verkaufsspalten.

Hoffentlich erhalten Sie Zeilen mit maximalem Spaltenwert für Ihre Tabellen.

Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!