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 ;".
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);
如果添加DISTINCT
运算符,则MAX
函数返回不同值的最大值,它与所有值的最大值相同。 这意味着DISTINCT
运算符不会对MAX
函数产生任何影响(用不用DISTINCT
运算符都可以)。
请注意,DISTINCT
运算符在其他聚合函数(如COUNT,SUM和AVG)中生效。
我们来看看示例数据库(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
要在payments
表中获得最大的付款,您可以使用以下查询:
SELECT MAX(amount) FROM payments;
执行上面查询语句,得到以下结果 -
mysql> SELECT MAX(amount) FROM payments; +-------------+ | MAX(amount) | +-------------+ | 120166.58 | +-------------+ 1 row in set
不仅要获得最大的付款金额,还要获得其他付款信息,如客户编号,支票号码和付款日期,您可以在子查询中使用MAX
函数,如下所示:
SELECT * FROM payments WHERE amount = ( SELECT MAX(amount) FROM payments);
执行上面查询语句,得到以下结果 -
+----------------+-------------+-------------+-----------+ | customerNumber | checkNumber | paymentDate | amount | +----------------+-------------+-------------+-----------+ | 141 | JE105477 | 2015-03-18 | 120166.58 | +----------------+-------------+-------------+-----------+ 1 row in set
上面查询语句是怎么运行的?
不使用MAX
函数的另一种方法是使用ORDER BY
子句以降序对结果集进行排序,并使用LIMIT
子句获取第一行,如下查询:
SELECT * FROM payments ORDER BY amount DESC LIMIT 1;
执行上面查询语句,得到以下结果 -
+----------------+-------------+-------------+-----------+ | customerNumber | checkNumber | paymentDate | amount | +----------------+-------------+-------------+-----------+ | 141 | JE105477 | 2015-03-18 | 120166.58 | +----------------+-------------+-------------+-----------+ 1 row in set
如果您没有在amount
列上创建索引,则第二个查询执行速度更快,因为它会检查payments
表中的所有行,而第一个查询会检查payments
表中的所有行两次,一次是在子查询中,另一次在外部查询中。 但是,如果amount
列被索引,则第一个查询将执行得更快。
要找到每个组的最大值,您可以在SELECT
语句中使用MAX
函数与GROUP BY
子句。
对于每个客户,查询获得客户已支付的最大付款,可使用以下查询:
SELECT customerNumber, MAX(amount) FROM payments GROUP BY customerNumber ORDER BY MAX(amount);
执行上面查询语句,得到以下查询结果 -
+----------------+-------------+ | 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
您可以在HAVING
子句中使用GROUP BY
子句中的MAX
函数,以根据指定的条件为分组添加过滤器。
例如,以下查询查找每个客户的最大付款; 并根据返回款项,如下面查询语句,只查询金额超过80000
MAX()
est la suivante :
SELECT customerNumber, MAX(amount) FROM payments GROUP BY customerNumber HAVING MAX(amount) > 80000;
DISTINCT
, la fonction
MAX
renvoie 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
DISTINCT
n'aura aucun impact sur la fonction
MAX
(peu importe que l'opérateur
DISTINCT
soit utilisé ou non) .
paiements
dans 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
payments
, vous pouvez utiliser la requête suivante : rrreeeExécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -rrreee
MAX
dans 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 ?
MAX
est d'utiliser la clause
ORDER BY
pour trier l'ensemble de résultats par ordre décroissant et d'utiliser
LIMIT
obtient 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
montant
colonne, 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
paiements
deux fois, une fois une fois dans la sous-requête et une autre fois dans la requête externe. Cependant, si la colonne
amount
est indexée, la première requête s'exécutera plus rapidement.
MAX
avec la clauseGROUP BY
dans 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 : rrreeeGROUP BY
dans 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!