Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir un enregistrement avec une valeur maximale dans MySQL

Plusieurs fois, vous devrez peut-être sélectionner des lignes avec une valeur de colonne maximale dans SQL. Puisqu'il n'y a pas de fonction intégrée pour cela, vous devez obtenir des enregistrements avec une valeur maximale à l'aide d'une requête SQL. Voici comment obtenir un enregistrement avec une valeur maximale dans MySQL. Vous pouvez également l'utiliser pour obtenir des lignes avec une valeur maximale dans PostgreSQL, SQL Server.

Comment obtenir un enregistrement avec une valeur maximale dans MySQL

Voici les étapes pour obtenir un enregistrement avec une valeur maximale dans MySQL.

Disons que vous avez le tableau suivant sales(order_date,sale) qui contient des données de ventes quotidiennes.

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

Il existe deux façons de sélectionner des lignes avec une valeur de colonne maximale dans SQL. Nous allons les examiner tous les deux.

Lecture bonus :comment obtenir les données des 12 derniers mois dans MySQL

Comment obtenir un enregistrement avec une valeur maximale à l'aide d'une sous-requête SQL

Voici la requête SQL pour obtenir des lignes avec max vente valeur à l'aide d'une sous-requête 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 |
+------------+------+--------+

Dans la requête ci-dessus, nous sélectionnons d'abord la valeur maximale pour la table dans la sous-requête (en gras ). Ensuite, nous sélectionnons ces lignes dans la table des ventes d'origine où la valeur de la colonne de vente est la valeur maximale. Pour les grandes tables, vous pouvez améliorer les performances des requêtes en indexant vente colonne.

Si vous souhaitez filtrer les données selon des conditions spécifiques, ajoutez une clause WHERE dans votre sous-requête, comme indiqué ci-dessous.

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

Lecture bonus :comment mettre à jour la vue dans MySQL

Comment obtenir un enregistrement avec une valeur maximale pour chaque GROUPE

Voici les étapes pour obtenir une ligne avec une valeur maximale en utilisant GROUP BY dans MySQL.

Imaginons que vous disposiez d'un tableau product_sales(product, order_date,sale) qui contient des données sur les ventes de plusieurs produits. Et vous souhaitez obtenir des enregistrements avec une valeur de vente maximale pour chaque produit.

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

Lecture bonus :Comment obtenir le nombre total d'utilisateurs cumulés par jour dans MySQL

Voici la requête SQL pour obtenir un enregistrement avec la valeur maximale en utilisant GROUP BY, pour chaque groupe, c'est-à-dire chaque produit.

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

Dans la requête ci-dessus, nous calculons d'abord la valeur de vente maximale pour chaque produit à l'aide d'une sous-requête imbriquée (en gras ), puis joignez le résultat à l'original product_sales tableau basé sur les colonnes produit et vente.

J'espère que vous pourrez obtenir des lignes avec une valeur de colonne maximale pour vos tables.

Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !