In MySQL können Sie die Anweisung „SELECT“ und die Funktion MAX() verwenden, um den Maximalwert in einer Reihe von Werten zurückzugeben. Die Syntax lautet „SELECT MAX(DISTINCT expression) FROM data Tabellenname;".
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
In MySQL können Sie die Anweisung „SELECT“ und die Funktion MAX() verwenden, um den Maximalwert abzufragen.
Die MySQL-Funktion MAX()
gibt den Maximalwert in einer Reihe von Werten zurück. Die Funktion MAX()
ist bei vielen Abfragen sehr praktisch, beispielsweise beim Ermitteln der Höchstmenge, des teuersten Produkts und der Höchstzahlung eines Kunden. 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()
lautet wie folgt: SELECT customerNumber, MAX(amount) FROM payments GROUP BY customerNumber HAVING MAX(amount) > 80000;
DISTINCT
hinzufügen, gibt die Funktion MAX
zurück Maximalwert verschiedener Werte. Es ist dasselbe wie das Maximum aller Werte. Das bedeutet, dass der Operator DISTINCT
keinen Einfluss auf die Funktion MAX
hat (es spielt keine Rolle, ob der Operator DISTINCT
verwendet wird oder nicht). . zahlungen
in der Beispieldatenbank ( yiibaidb), seine Tabellenstruktur ist wie folgt: 🎜+----------------+-------------+ | 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
zahlungen
zu erhalten, können Sie die folgende Abfrage verwenden: 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse -🎜rrreeeMAX
in einer Unterabfrage verwenden, wie unten gezeigt: 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse – 🎜rrreee🎜Wie funktioniert das? Wird die obige Abfrageanweisung ausgeführt? 🎜MAX
nicht zu verwenden, besteht darin, die Klausel ORDER BY
zu verwenden, um die Ergebnismenge in absteigender Reihenfolge zu sortieren und LIMIT
-Klausel ruft die erste Zeile ab, fragen Sie wie folgt ab: 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse -🎜rrreee🎜Wenn Sie keinen Index für den amount
erstellen Spalte, dann wird die zweite Abfrage schneller ausgeführt, da alle Zeilen in der Tabelle zahlungen
überprüft werden, während die erste Abfrage alle Zeilen in der Tabelle zahlungen
zweimal überprüft, nämlich einmal der Unterabfrage und ein anderes Mal in der äußeren Abfrage. Wenn die Spalte amount
jedoch indiziert ist, wird die erste Abfrage schneller ausgeführt. 🎜MAX
mit der Klausel GROUP BY
in der Anweisung SELECT
verwenden. 🎜🎜Fragen Sie für jeden Kunden die maximale Zahlung ab, die der Kunde gezahlt hat. Sie können die folgende Abfrage verwenden: 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Abfrageergebnisse: 🎜rrreeeGROUP BY
-Klausel in der HAVING
-Klausel >MAX verwenden. code>-Funktion zum Hinzufügen von Filtern zu Gruppen basierend auf angegebenen Bedingungen. 🎜🎜Mit der folgenden Abfrage wird beispielsweise die maximale Zahlung für jeden Kunden ermittelt. Basierend auf dem zurückgegebenen Betrag werden, wie in der folgenden Abfrageanweisung gezeigt, nur Abfragen für Zahlungen durchgeführt, die 80000
überschreiten obige Abfrageanweisung und erhalten Sie die folgenden Ergebnisse -🎜rrreee🎜【Verwandte Empfehlung: 🎜MySQL-Video-Tutorial🎜】🎜Das obige ist der detaillierte Inhalt vonSo fragen Sie den Maximalwert in MySQL ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!