mysql怎么查詢最大值

mysql中,可以利用“SELECT”語句和MAX()函數(shù)來查詢最大值,該函數(shù)可返回一組值中的最大值,語法“SELECT MAX(DISTINCT expression) FROM 數(shù)據(jù)表名;”。

mysql怎么查詢最大值

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

在mysql中,可以利用“SELECT”語句和MAX()函數(shù)來查詢最大值。

MySQL MAX()函數(shù)返回一組值中的最大值。MAX()函數(shù)在許多查詢中非常方便,例如查找最大數(shù)量,最昂貴的產(chǎn)品以及客戶的最大付款。

MAX()函數(shù)的語法如下:

MAX(DISTINCT expression);

如果添加DISTINCT運(yùn)算符,則MAX函數(shù)返回不同值的最大值,它與所有值的最大值相同。 這意味著DISTINCT運(yùn)算符不會(huì)對MAX函數(shù)產(chǎn)生任何影響(用不用DISTINCT運(yùn)算符都可以)。

請注意,DISTINCT運(yùn)算符在其他聚合函數(shù)(如COUNT,SUM和AVG)中生效。

MySQL MAX函數(shù)示例

我們來看看示例數(shù)據(jù)庫(yiibaidb)中的payments表,其表結(jié)構(gòu)如下所示 –

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;

執(zhí)行上面查詢語句,得到以下結(jié)果 –

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

MySQL MAX函數(shù)在子查詢中

不僅要獲得最大的付款金額,還要獲得其他付款信息,如客戶編號,支票號碼和付款日期,您可以在子查詢中使用MAX函數(shù),如下所示:

SELECT? ????* FROM ????payments WHERE ????amount?=?( ?SELECT? ????????????MAX(amount) ????????FROM ????????????payments);

執(zhí)行上面查詢語句,得到以下結(jié)果 –

+----------------+-------------+-------------+-----------+ | customerNumber | checkNumber | paymentDate | amount    | +----------------+-------------+-------------+-----------+ |            141 | JE105477    | 2015-03-18  | 120166.58 | +----------------+-------------+-------------+-----------+ 1 row in set

上面查詢語句是怎么運(yùn)行的?

  • 子查詢返回所有的最大付款金額。
  • 外部查詢獲取的金額等于從子查詢返回的最大金額的其他相關(guān)付款信息。

不使用MAX函數(shù)的另一種方法是使用ORDER BY子句以降序?qū)Y(jié)果集進(jìn)行排序,并使用LIMIT子句獲取第一行,如下查詢:

SELECT? ????* FROM ????payments ORDER?BY?amount?DESC LIMIT?1;

執(zhí)行上面查詢語句,得到以下結(jié)果 –

+----------------+-------------+-------------+-----------+ |?customerNumber?|?checkNumber?|?paymentDate?|?amount????| +----------------+-------------+-------------+-----------+ |????????????141?|?JE105477????|?2015-03-18??|?120166.58?| +----------------+-------------+-------------+-----------+ 1?row?in?set

如果您沒有在amount列上創(chuàng)建索引,則第二個(gè)查詢執(zhí)行速度更快,因?yàn)樗鼤?huì)檢查payments表中的所有行,而第一個(gè)查詢會(huì)檢查payments表中的所有行兩次,一次是在子查詢中,另一次在外部查詢中。 但是,如果amount列被索引,則第一個(gè)查詢將執(zhí)行得更快。

具有GROUP BY子句的MySQL MAX

要找到每個(gè)組的最大值,您可以在SELECT語句中使用MAX函數(shù)與GROUP BY子句。

對于每個(gè)客戶,查詢獲得客戶已支付的最大付款,可使用以下查詢:

SELECT? ????customerNumber,?MAX(amount) FROM ????payments GROUP?BY?customerNumber ORDER?BY?MAX(amount);

執(zhí)行上面查詢語句,得到以下查詢結(jié)果 –

+----------------+-------------+ |?customerNumber?|?MAX(amount)?| +----------------+-------------+ |????????????219?|?4465.85?????| |????????????198?|?9658.74?????| |????????????381?|?14379.9?????| |????????????103?|?14571.44????| |????????????473?|?17746.26????| |????????????362?|?18473.71????| *******?此處省略一大波數(shù)據(jù)?****** |????????????148?|?105743??????| |????????????124?|?111654.4????| |????????????141?|?120166.58???| +----------------+-------------+ 98?rows?in?set

具有HAVING子句的MySQL MAX

您可以在HAVING子句中使用GROUP BY子句中的MAX函數(shù),以根據(jù)指定的條件為分組添加過濾器。

例如,以下查詢查找每個(gè)客戶的最大付款; 并根據(jù)返回款項(xiàng),如下面查詢語句,只查詢金額超過80000的付款 –

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

執(zhí)行上面查詢語句,得到以下結(jié)果 –

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

【相關(guān)推薦:mysql視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享