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