mysql中如何求平均值
這篇文章主要為大家展示了“mysql中如何求平均值”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“mysql中如何求平均值”這篇文章吧。
在mysql中,可以利用AVG()函數(shù)來求平均值,該函數(shù)可以通過計(jì)算返回的行數(shù)和每一行數(shù)據(jù)的和,求得指定列數(shù)據(jù)的平均值;語法“SELECT AVG(column_name) FROM table_name”。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
在mysql中,可以利用AVG()函數(shù)來求平均值。
MySQL AVG()函數(shù)是一個聚合函數(shù),它用于計(jì)算一組值或表達(dá)式的平均值。
AVG() 函數(shù)可以通過計(jì)算返回的行數(shù)和每一行數(shù)據(jù)的和,求得指定列數(shù)據(jù)的平均值。
AVG()函數(shù)的語法如下:
SELECTAVG(column_name)FROMtable_name;
AVG()函數(shù)中還可添加DISTINCT運(yùn)算符來計(jì)算不同值的平均值。 例如,如果您有一組值1、1、2、3,具有DISTINCT操作的AVG()函數(shù)將返回不同值的和,即:(1 + 2 + 3)/3 = 2.00 。
MySQL AVG示例
我們將在示例數(shù)據(jù)庫中使用products表進(jìn)行演示,下圖是products表的結(jié)構(gòu) -
mysql>descproducts; +--------------------+---------------+------+-----+---------+------------------+ |Field|Type|Null|Key|Default|Extra| +--------------------+---------------+------+-----+---------+------------------+ |productCode|varchar(15)|NO|PRI||| |productName|varchar(70)|NO|MUL|NULL|| |productLine|varchar(50)|NO|MUL|NULL|| |productScale|varchar(10)|NO||NULL|| |productVendor|varchar(50)|NO||NULL|| |productDescription|text|NO||NULL|| |quantityInStock|smallint(6)|NO||NULL|| |buyPrice|decimal(10,2)|NO||NULL|| |MSRP|decimal(10,2)|NO||NULL|| |stockValue|double|YES||NULL|STOREDGENERATED| +--------------------+---------------+------+-----+---------+------------------+ 10rowsinset
要計(jì)算products表中所有產(chǎn)品的平均價格,可以使用AVG函數(shù),如下查詢:
SELECTAVG(buyprice)'AvaragePrice'FROMproducts;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTAVG(buyprice)'AvaragePrice'FROMproducts; +---------------+ |AvaragePrice| +---------------+ |54.395182| +---------------+ 1rowinset
請注意,FORMAT函數(shù)用于格式化AVG函數(shù)返回的平均值。
您可以向SELECT語句添加一個WHERE子句來計(jì)算子集值的平均值。 例如,要計(jì)算產(chǎn)品線為Classic Cars的產(chǎn)品的平均價格,您可以使用以下查詢:
SELECTAVG(buyprice)'AvarageClassicCarsPrice' FROMproducts WHEREproductline='ClassicCars';
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTAVG(buyprice)'AvarageClassicCarsPrice' FROMproducts WHEREproductline='ClassicCars'; +----------------------------+ |AvarageClassicCarsPrice| +----------------------------+ |64.446316| +----------------------------+ 1rowinset
具有DISTINCT的MySQL AVG()函數(shù)
有些產(chǎn)品價格相同,可以使用以下查詢來檢查它:
SELECTCOUNT(buyprice)-COUNT(DISTINCTbuyprice)FROMproducts;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTCOUNT(buyprice)-COUNT(DISTINCTbuyprice)FROMproducts; +--------------------------------------------+ |COUNT(buyprice)-COUNT(DISTINCTbuyprice)| +--------------------------------------------+ |2| +--------------------------------------------+ 1rowinset
可以使用AVG()函數(shù)通過添加DISTINCT運(yùn)算符來計(jì)算不同價格的平均值,如下所示:
SELECTAVG(DISTINCTbuyprice)FROMproducts;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTAVG(DISTINCTbuyprice)FROMproducts; +------------------------+ |AVG(DISTINCTbuyprice)| +------------------------+ |54.372870| +------------------------+ 1rowinset
結(jié)果與使用DISTINCT操作符的平均價格略有不同。
具有GROUP BY子句的MySQL AVG
我們經(jīng)常使用AVG函數(shù)與GROUP BY子句一起計(jì)算表中每組行的平均值。
例如,要計(jì)算每個產(chǎn)品線的產(chǎn)品的平均價格,您將使用帶有GROUP BY子句的AVG函數(shù),如下查詢語句:
SELECTproductline, AVG(buyprice)'AvaragePrice' FROMproducts GROUPBYproductline;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTproductline, AVG(buyprice)'AvaragePrice' FROMproducts GROUPBYproductline; +------------------+---------------+ |productline|AvaragePrice| +------------------+---------------+ |ClassicCars|64.446316| |Motorcycles|50.685385| |Planes|49.629167| |Ships|47.007778| |Trains|43.923333| |TrucksandBuses|56.329091| |VintageCars|46.066250| +------------------+---------------+ 7rowsinset
具有HAVING子句的MySQL AVG
您可以使用AVG函數(shù)中的HAVING子句中為分組的平均值設(shè)置條件。 例如,如果要僅選擇產(chǎn)品平均價格大于50的產(chǎn)品線,則可以使用以下查詢:
SELECTproductline,AVG(buyprice)'AvaragePrice'FROMproductsGROUPBYproductlineHAVINGAVG(buyprice)>50;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTproductline,AVG(buyprice)'AvaragePrice'FROMproductsGROUPBYproductlineHAVINGAVG(buyprice)>50; +------------------+---------------+ |productline|AvaragePrice| +------------------+---------------+ |ClassicCars|64.446316| |Motorcycles|50.685385| |TrucksandBuses|56.329091| +------------------+---------------+ 3rowsinset
MySQL AVG()函數(shù)與子查詢
您可以在SQL語句中多次使用AVG()函數(shù)來計(jì)算一組平均值的平均值。 例如,可以計(jì)算產(chǎn)品線平均購買價格的平均買價如下:
SELECTAVG(pl_avg)'AverageProduct' FROM( SELECTAVG(buyprice)pl_avg FROMproducts GROUPBYproductline )avgs;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTAVG(pl_avg)'AverageProduct' FROM( SELECTAVG(buyprice)pl_avg FROMproducts GROUPBYproductline )avgs; +-----------------+ |AverageProduct| +-----------------+ |51.1553314286| +-----------------+ 1rowinset
怎么運(yùn)行的 -
-
子查詢根據(jù)產(chǎn)品線計(jì)算平均購買價格。
-
外部查詢計(jì)算從子查詢返回的產(chǎn)品線的平均購買價格的平均購買價格。
具有NULL值的MySQL AVG函數(shù)
AVG()函數(shù)忽略計(jì)算中的NULL值,請參閱以下示例:
首先,創(chuàng)建一個名為t的新表,其中有兩列id和val,val列可以包含NULL值。
CREATETABLEIFNOTEXISTSt( idintauto_incrementprimarykey, valint );
其次,在t表中插入一些行,包括NULL值。
INSERTINTOt(val) VALUES(1),(2),(nulL),(3);
第三,使用AVG()函數(shù)計(jì)算val列中值的平均值:
SELECTAVG(val)FROMt;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTAVG(val)FROMt; +----------+ |AVG(val)| +----------+ |2.0000| +----------+ 1rowinset
該語句按預(yù)期返回2,因?yàn)樵贏VG函數(shù)的計(jì)算中不包括NULL值。
具有控制流函數(shù)的MySQL AVG
要計(jì)算列的平均值,并在單個語句中有條件地計(jì)算相同列的平均值,可以使用具有控制流函數(shù)(如IF,CASE,IFNULL,NULLIF等)的AVG函數(shù)。
例如,要計(jì)算Classic Cars產(chǎn)品線的平均價格與所有產(chǎn)品的平均價格的比例,請使用以下聲明:
SELECTAVG(IF(productline='ClassicCars',buyprice,NULL))/AVG(buyprice)'ClassicCars/Products' FROMproducts;
執(zhí)行上面查詢語句,得到以下結(jié)果 -
mysql>SELECTAVG(IF(productline='ClassicCars',buyprice,NULL))/AVG(buyprice)'ClassicCars/Products' FROMproducts; +------------------------+ |ClassicCars/Products| +------------------------+ |1.1847798580| +------------------------+ 1rowinset
如果產(chǎn)品線是Classic Cars,則IF(productline='Classic Cars',buyprice,NULL)表達(dá)式返回價格,否則返回NULL。
因?yàn)锳VG函數(shù)忽略了計(jì)算中的NULL值,所以AVG(IF(productline ='Classic Cars',buyprice,NULL))表達(dá)式只計(jì)算產(chǎn)品線是Classic Cars的產(chǎn)品的平均價格。
總結(jié)
以上是生活随笔為你收集整理的mysql中如何求平均值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zeppelin该如何入门使用
- 下一篇: 在eclipse中, 如何快速输入(快捷