Maison> base de données> tutoriel mysql> le corps du texte

Comment interroger la valeur maximale dans MySQL

青灯夜游
Libérer: 2021-12-31 15:10:40
original
36786 Les gens l'ont consulté

Dans MySQL, vous pouvez utiliser l'instruction "SELECT" et la fonction MAX() pour interroger la valeur maximale. Cette fonction peut renvoyer la valeur maximale dans un ensemble de valeurs. La syntaxe est "SELECT MAX(DISTINCT expression) FROM data. nom de la table ;".

Comment interroger la valeur maximale dans MySQL

L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.

Dans MySQL, vous pouvez utiliser l'instruction "SELECT" et la fonction MAX() pour interroger la valeur maximale.

La fonction MySQLMAX()renvoie la valeur maximale dans un ensemble de valeurs. La fonctionMAX()est très pratique dans de nombreuses requêtes, comme par exemple trouver la quantité maximale, le produit le plus cher et le paiement maximum par un client.MAX()函数返回一组值中的最大值。MAX()函数在许多查询中非常方便,例如查找最大数量,最昂贵的产品以及客户的最大付款。

MAX()函数的语法如下:

MAX(DISTINCT expression);
Copier après la connexion

如果添加DISTINCT运算符,则MAX函数返回不同值的最大值,它与所有值的最大值相同。 这意味着DISTINCT运算符不会对MAX函数产生任何影响(用不用DISTINCT运算符都可以)。

请注意,DISTINCT运算符在其他聚合函数(如COUNT,SUM和AVG)中生效。

MySQL MAX函数示例

我们来看看示例数据库(yiibaidb)中的payments表,其表结构如下所示 -

mysql> desc payments; +----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+---------------+------+-----+---------+-------+ | customerNumber | int(11) | NO | PRI | NULL | | | checkNumber | varchar(50) | NO | PRI | NULL | | | paymentDate | date | NO | | NULL | | | amount | decimal(10,2) | NO | | NULL | | +----------------+---------------+------+-----+---------+-------+ 4 rows in set
Copier après la connexion

要在payments表中获得最大的付款,您可以使用以下查询:

SELECT MAX(amount) FROM payments;
Copier après la connexion

执行上面查询语句,得到以下结果 -

mysql> SELECT MAX(amount) FROM payments; +-------------+ | MAX(amount) | +-------------+ | 120166.58 | +-------------+ 1 row in set
Copier après la connexion

MySQL MAX函数在子查询中

不仅要获得最大的付款金额,还要获得其他付款信息,如客户编号,支票号码和付款日期,您可以在子查询中使用MAX函数,如下所示:

SELECT * FROM payments WHERE amount = ( SELECT MAX(amount) FROM payments);
Copier après la connexion

执行上面查询语句,得到以下结果 -

+----------------+-------------+-------------+-----------+ | customerNumber | checkNumber | paymentDate | amount | +----------------+-------------+-------------+-----------+ | 141 | JE105477 | 2015-03-18 | 120166.58 | +----------------+-------------+-------------+-----------+ 1 row in set
Copier après la connexion

上面查询语句是怎么运行的?

  • 子查询返回所有的最大付款金额。
  • 外部查询获取的金额等于从子查询返回的最大金额的其他相关付款信息。

不使用MAX函数的另一种方法是使用ORDER BY子句以降序对结果集进行排序,并使用LIMIT子句获取第一行,如下查询:

SELECT * FROM payments ORDER BY amount DESC LIMIT 1;
Copier après la connexion

执行上面查询语句,得到以下结果 -

+----------------+-------------+-------------+-----------+ | customerNumber | checkNumber | paymentDate | amount | +----------------+-------------+-------------+-----------+ | 141 | JE105477 | 2015-03-18 | 120166.58 | +----------------+-------------+-------------+-----------+ 1 row in set
Copier après la connexion

如果您没有在amount列上创建索引,则第二个查询执行速度更快,因为它会检查payments表中的所有行,而第一个查询会检查payments表中的所有行两次,一次是在子查询中,另一次在外部查询中。 但是,如果amount列被索引,则第一个查询将执行得更快。

具有GROUP BY子句的MySQL MAX

要找到每个组的最大值,您可以在SELECT语句中使用MAX函数与GROUP BY子句。

对于每个客户,查询获得客户已支付的最大付款,可使用以下查询:

SELECT customerNumber, MAX(amount) FROM payments GROUP BY customerNumber ORDER BY MAX(amount);
Copier après la connexion

执行上面查询语句,得到以下查询结果 -

+----------------+-------------+ | customerNumber | MAX(amount) | +----------------+-------------+ | 219 | 4465.85 | | 198 | 9658.74 | | 381 | 14379.9 | | 103 | 14571.44 | | 473 | 17746.26 | | 362 | 18473.71 | ******* 此处省略一大波数据 ****** | 148 | 105743 | | 124 | 111654.4 | | 141 | 120166.58 | +----------------+-------------+ 98 rows in set
Copier après la connexion

具有HAVING子句的MySQL MAX

您可以在HAVING子句中使用GROUP BY子句中的MAX函数,以根据指定的条件为分组添加过滤器。

例如,以下查询查找每个客户的最大付款; 并根据返回款项,如下面查询语句,只查询金额超过80000

La syntaxe de la fonction MAX()est la suivante :

SELECT customerNumber, MAX(amount) FROM payments GROUP BY customerNumber HAVING MAX(amount) > 80000;
Copier après la connexion

Si vous ajoutez l'opérateur DISTINCT, la fonction MAXrenvoie le valeur maximale de différentes valeurs, c'est la même chose que le maximum de toutes les valeurs. Cela signifie que l'opérateur DISTINCTn'aura aucun impact sur la fonction MAX(peu importe que l'opérateur DISTINCTsoit utilisé ou non) .

Veuillez noter que l'opérateurDISTINCTfonctionne dans d'autresfonctions d'agrégationtelles que COUNT, SUM et AVG.

Exemple de fonction MySQL MAX

Jetons un coup d'œil à la table paiementsdans l'exemple de base de données ( yiibaidb), sa structure de table est la suivante -
+----------------+-------------+ | customerNumber | MAX(amount) | +----------------+-------------+ | 114 | 82261.22 | | 124 | 111654.4 | | 141 | 120166.58 | | 148 | 105743 | | 167 | 85024.46 | | 239 | 80375.24 | | 321 | 85559.12 | +----------------+-------------+ 7 rows in set
Copier après la connexion
Pour obtenir le paiement maximum dans la table payments, vous pouvez utiliser la requête suivante : rrreeeExécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -rrreee

Fonction MySQL MAX dans la sous-requête

Non seulement pour obtenir le montant maximum du paiement, mais également pour obtenir d'autres informations de paiement telles que comme numéro de client, numéro de chèque et date de paiement, vous pouvez utiliser la fonction MAXdans une sous-requête, comme indiqué ci-dessous : rrreeeExécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -rrreeeComment l'instruction de requête ci-dessus est-elle exécutée ?
  • La sous-requête renvoie tous les montants de paiement maximum.
  • La requête externe récupère d'autres informations de paiement associées pour un montant égal au montant maximum renvoyé par la sous-requête.
Une alternative à ne pas utiliser la fonction MAXest d'utiliser la clause ORDER BYpour trier l'ensemble de résultats par ordre décroissant et d'utiliser LIMITobtient la première ligne, interrogez comme suit : rrreeeExécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -rrreeeSi vous ne créez pas d'index sur le montantcolonne, puis la deuxième requête s'exécute plus rapidement car elle vérifie toutes les lignes de la table paiements, tandis que la première requête vérifie toutes les lignes de la table paiementsdeux fois, une fois une fois dans la sous-requête et une autre fois dans la requête externe. Cependant, si la colonne amountest indexée, la première requête s'exécutera plus rapidement.

MySQL MAX avec clause GROUP BYPour trouver la valeur maximale de chaque groupe, vous pouvez utiliser la fonctionMAXavec la clauseGROUP BYdans l'instructionSELECT. Pour chaque client, effectuez une requête pour obtenir le paiement maximum que le client a payé. Vous pouvez utiliser la requête suivante : rrreeeExécutez l'instruction de requête ci-dessus et obtenez les résultats de requête suivants : rrreee

MySQL MAX avec clause HAVING

Vous pouvez utiliser la clause GROUP BYdans la clause HAVING>MAX code> fonction pour ajouter des filtres aux groupes en fonction de conditions spécifiées. Par exemple, la requête suivante recherche le paiement maximum pour chaque client ; et en fonction du montant retourné, comme indiqué dans l'instruction de requête suivante, seules les requêtes pour les paiements dépassant 80000- rrreeeExécutez le ci-dessus et obtenez les résultats suivants -rrreee[Recommandations associées : Tutoriel vidéo mysql]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!