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

Jak uzyskać rekord z maksymalną wartością w MySQL?

Wiele razy może być konieczne wybranie wierszy z maksymalną wartością kolumny w SQL. Ponieważ nie ma dla niego wbudowanej funkcji, musisz uzyskać rekordy o maksymalnej wartości za pomocą zapytania SQL. Oto jak uzyskać rekord z maksymalną wartością w MySQL. Możesz go również użyć, aby uzyskać wiersze z maksymalną wartością w PostgreSQL, SQL Server.

Jak uzyskać rekord z maksymalną wartością w MySQL

Oto kroki, aby uzyskać rekord z maksymalną wartością w MySQL.

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

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

Istnieją dwa sposoby wybierania wierszy z maksymalną wartością kolumny w SQL. Przyjrzymy się im obu.

Przeczytaj bonus:Jak uzyskać dane z ostatnich 12 miesięcy w MySQL

Jak uzyskać rekord z maksymalną wartością za pomocą podzapytania SQL

Oto zapytanie SQL, aby uzyskać wiersze z maksymalną sprzedażą wartość za pomocą podzapytania SQL.

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

W powyższym zapytaniu najpierw wybieramy maksymalną wartość tabeli w podzapytaniu (pogrubioną czcionką) ). Następnie wybieramy te wiersze z oryginalnej tabeli sprzedaży, w których wartość kolumny sprzedaży jest wartością maksymalną. W przypadku dużych tabel możesz poprawić wydajność zapytań, indeksując wyprzedaż kolumna.

Jeśli chcesz filtrować dane zgodnie z określonymi warunkami, dodaj klauzulę WHERE w podzapytaniu, jak pokazano poniżej.

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

Przeczytaj bonus:Jak zaktualizować widok w MySQL

Jak uzyskać rekord z maksymalną wartością dla każdej GRUPY

Oto kroki, aby uzyskać wiersz z maksymalną wartością za pomocą GROUP BY w MySQL.

Załóżmy, że masz tabelę product_sales(product, order_date,sale) który zawiera dane sprzedaży dla wielu produktów. I chcesz uzyskać rekordy z maksymalną wartością sprzedaży dla każdego produktu.

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

Przeczytaj bonus:Jak uzyskać łączną liczbę użytkowników dziennie w MySQL

Oto zapytanie SQL, aby uzyskać rekord o maksymalnej wartości za pomocą funkcji GROUP BY, dla każdej grupy, czyli każdego produktu.

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

W powyższym zapytaniu najpierw obliczamy maksymalną wartość sprzedaży dla każdego produktu za pomocą zagnieżdżonego podzapytania (pogrubioną czcionką ), a następnie połącz wynik z oryginalną product_sales tabela oparta na kolumnach produktów i sprzedaży.

Mamy nadzieję, że możesz uzyskać wiersze z maksymalną wartością kolumny dla swoich tabel.

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. Przykłady LOCALTIME – MySQL

  2. Jak rzutować znak na liczbę całkowitą podczas odpytywania w django ORM?

  3. Jak obliczyć dziennych aktywnych użytkowników (DAU) w MySQL?

  4. przyznaj zdalny dostęp do bazy danych MySQL z dowolnego adresu IP

  5. Zapytanie SQL do utworzenia bazy danych w MySQL