Vaak moet u mogelijk rijen selecteren met een maximale kolomwaarde in SQL. Omdat er geen ingebouwde functie voor is, moet u records met maximale waarde ophalen met behulp van SQL-query. Hier leest u hoe u een record met maximale waarde in MySQL kunt krijgen. Je kunt het ook gebruiken om rijen met een maximale waarde op te halen in PostgreSQL, SQL Server.
Hoe krijg ik een record met maximale waarde in MySQL
Hier zijn de stappen om een record met maximale waarde in MySQL te krijgen.
Stel dat u de volgende tabel sales(order_date,sale) . heeft die dagelijkse verkoopgegevens bevat.
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 | +------------+------+--------+
Er zijn twee manieren om rijen met een maximale kolomwaarde in SQL te selecteren. We zullen ze allebei bekijken.
Bonus lezen:hoe u gegevens van de afgelopen 12 maanden in MySQL kunt krijgen
Hoe een record met maximale waarde te krijgen met behulp van SQL-subquery
Hier is de SQL-query om rijen te krijgen met max verkoop waarde met behulp van SQL-subquery.
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 de bovenstaande query selecteren we eerst de maximale waarde voor tabel in subquery (in vet ). Vervolgens selecteren we die rijen uit de originele verkooptabel waar de waarde van de verkoopkolom de maximale waarde is. Voor grote tabellen kunt u de queryprestaties verbeteren door verkoop te indexeren kolom.
Als u gegevens wilt filteren volgens specifieke voorwaarden, voegt u een WHERE-component toe aan uw subquery, zoals hieronder weergegeven.
mysql> select * from sales where sale=( select max(sale) from sales WHERE <condition> );
Bonus lezen:weergave bijwerken in MySQL
Hoe een record te krijgen met de maximale waarde voor elke GROEP
Hier zijn de stappen om rij met maximale waarde te krijgen met GROUP BY in MySQL.
Stel dat u een tabel heeft product_sales(product, order_date,sale) die verkoopgegevens voor meerdere producten bevat. En u wilt records krijgen met een maximale verkoopwaarde voor elk product.
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 lezen:hoe u cumulatief totaal aantal gebruikers per dag in MySQL kunt krijgen
Hier is de SQL-query om een record met maximale waarde te krijgen met GROUP BY, voor elke groep, dat wil zeggen voor elk product.
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 de bovenstaande zoekopdracht berekenen we eerst de maximale verkoopwaarde voor elk product met behulp van geneste subquery's (in vet ), en voeg vervolgens het resultaat toe met originele product_sales tabel op basis van product- en verkoopkolommen.
Hopelijk kun je rijen krijgen met een maximale kolomwaarde voor je tabellen.
Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!