Heim  >  Artikel  >  Datenbank  >  So fragen Sie den Maximalwert in MySQL ab

So fragen Sie den Maximalwert in MySQL ab

青灯夜游
青灯夜游Original
2021-12-31 15:10:4036803Durchsuche

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;".

So fragen Sie den Maximalwert in MySQL ab

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)中生效。

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

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

SELECT 
    MAX(amount)
FROM
    payments;

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

mysql> SELECT 
    MAX(amount)
FROM
    payments;
+-------------+
| MAX(amount) |
+-------------+
| 120166.58   |
+-------------+
1 row in set

MySQL MAX函数在子查询中

不仅要获得最大的付款金额,还要获得其他付款信息,如客户编号,支票号码和付款日期,您可以在子查询中使用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列被索引,则第一个查询将执行得更快。

具有GROUP BY子句的MySQL MAX

要找到每个组的最大值,您可以在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子句的MySQL MAX

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

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

Die Syntax der Funktion MAX() lautet wie folgt:

SELECT 
    customerNumber, MAX(amount)
FROM
    payments
GROUP BY customerNumber
HAVING MAX(amount) > 80000;

Wenn Sie den Operator 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). .

Bitte beachten Sie, dass der DISTINCT-Operator in anderen Aggregatfunktionen wie COUNT, SUM und AVG funktioniert.

MySQL MAX-Funktionsbeispiel

Werfen wir einen Blick auf die Tabelle 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
🎜 Um die maximale Zahlung in der Tabelle zahlungen zu erhalten, können Sie die folgende Abfrage verwenden: 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse -🎜rrreee

MySQL MAX-Funktion in Unterabfrage

🎜Nicht nur um den maximalen Zahlungsbetrag zu erhalten, sondern auch um andere Zahlungsinformationen wie z B. Kundennummer, Schecknummer und Zahlungsdatum, können Sie die Funktion MAX 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? 🎜
  • Unterabfrage gibt alle maximalen Zahlungsbeträge zurück.
  • Die äußere Abfrage ruft andere zugehörige Zahlungsinformationen für einen Betrag ab, der dem von der Unterabfrage zurückgegebenen Höchstbetrag entspricht.
🎜Eine Alternative dazu, die Funktion 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. 🎜

MySQL MAX mit GROUP BY-Klausel🎜Um den Maximalwert jeder Gruppe zu ermitteln, können Sie die Funktion 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: 🎜rrreee

MySQL MAX mit HAVING-Klausel

🎜Sie können die GROUP 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn