MySQL之算术表达式、聚合函数及GROUP BY 与 HANVING 等函数的应用
生活随笔
收集整理的這篇文章主要介紹了
MySQL之算术表达式、聚合函数及GROUP BY 与 HANVING 等函数的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、MySQL的算術表達式
算術表達式就是加減乘除的運算過程,主要是對一條數據中出現的數字進行統計和運算。
首先,有一張數據表,如下:
mysql> select * from test_score; +----+-------+--------+-------+--------+--------+ | id | class | name | yuwen | shuxue | yingyu | +----+-------+--------+-------+--------+--------+ | 1 | 1 | 張三 | 95 | 90 | 97 | | 2 | 1 | 李四 | 59 | 88 | 90 | | 3 | 1 | 王五 | 99 | 99 | 99 | | 4 | 1 | 馬六 | 51 | 56 | 59 | | 5 | 2 | 侯七 | 92 | 94 | 93 | | 6 | 2 | 黑八 | 92 | 97 | 89 | | 7 | 2 | 牛二 | 59 | 60 | 61 | | 8 | 2 | 熊大 | 55 | 50 | 54 | | 9 | 3 | 鐵牛 | 53 | 54 | 51 | | 10 | 3 | 銅鼓 | 49 | 47 | 54 | | 11 | 3 | 鋼巴 | 47 | 51 | 50 | +----+-------+--------+-------+--------+--------+ 11 rows in set (0.00 sec)然后統計總分,如下:
#學生張三的成績總分 mysql> SELECT (yuwen+shuxue+yingyu) AS total FROM test_score where name='張三'; +-------+ | total | +-------+ | 282 | +-------+ 1 row in set (0.00 sec)二、SUM()函數的使用
定義:SUM()函數用于計算一組值或表達式的總和。
以前上學時老師會統計每科的平均分,然后看看誰拉了后腿。先計算語文,就是先把班里語文得分相加得到總分,然后除以學生人數,得到的就是平均分,低于平均分的學生就要倒霉了。
三、聚合函數
MySQL提供了許多聚合函數,包括AVG,COUNT,SUM,MIN,MAX等。除COUNT函數外,其它聚合函數在執行計算時會忽略NULL值。
#語文最高分 mysql> SELECT MAX(yuwen) FROM test_score; +------------+ | MAX(yuwen) | +------------+ | 99 | +------------+ 1 row in set (0.00 sec)#語文最低分及所在班級 mysql> SELECT class,MIN(yuwen) FROM test_score; +-------+------------+ | class | MIN(yuwen) | +-------+------------+ | 1 | 47 | +-------+------------+ 1 row in set (0.00 sec)#通過聚合函數求語文成績的平均值 mysql> SELECT avg(yuwen) AS total FROM test_score; +---------+ | total | +---------+ | 68.2727 | +---------+ 1 row in set (0.00 sec)#格式化后語文成績的平均值 mysql> SELECT format(avg(yuwen),2) AS total FROM test_score; +-------+ | total | +-------+ | 68.27 | +-------+ 1 row in set (0.00 sec)#出去重復項后的語文成績平均分 mysql> SELECT avg(DISTINCT yuwen) AS total FROM test_score; +---------+ | total | +---------+ | 66.6667 | +---------+ 1 row in set (0.00 sec)四、GROUP BY 與 HAVING 的應用
#GROUP BY分組 #各班級語文總分 mysql> SELECT class,sum(yuwen) AS yuwen_total FROM test_score GROUP BY class; +-------+-------------+ | class | yuwen_total | +-------+-------------+ | 1 | 304 | | 2 | 298 | | 3 | 149 | +-------+-------------+ 3 rows in set (0.00 sec)#各班級人數 mysql> SELECT class,count(*) AS total FROM test_score GROUP BY class; +-------+-------+ | class | total | +-------+-------+ | 1 | 4 | | 2 | 4 | | 3 | 3 | +-------+-------+ 3 rows in set (0.00 sec)#各班級語文成績的平均值 mysql> SELECT class,avg(yuwen) AS total FROM test_score GROUP BY class; +-------+---------+ | class | total | +-------+---------+ | 1 | 76.0000 | | 2 | 74.5000 | | 3 | 49.6667 | +-------+---------+ 3 rows in set (0.00 sec)#各班級語文最高分 mysql> SELECT class,MAX(yuwen) FROM test_score GROUP BY class; +-------+------------+ | class | MAX(yuwen) | +-------+------------+ | 1 | 99 | | 2 | 92 | | 3 | 53 | +-------+------------+ 3 rows in set (0.00 sec)#語文最低分(并排序) mysql> SELECT class,MIN(yuwen) AS yuwen FROM test_score GROUP BY class ORDER BY yuwen asc; +-------+-------+ | class | yuwen | +-------+-------+ | 3 | 47 | | 1 | 51 | | 2 | 55 | +-------+-------+ 3 rows in set (0.00 sec)#各個班級的語文成績最低分 mysql> SELECT class,MIN(yuwen) FROM test_score WHERE yuwen<60 GROUP BY class; +-------+------------+ | class | MIN(yuwen) | +-------+------------+ | 1 | 51 | | 2 | 55 | | 3 | 47 | +-------+------------+ 3 rows in set (0.00 sec)#各個班級中平均分最低的班級 mysql> SELECT class,avg(yuwen) as yuwen FROM test_score GROUP BY class HAVING yuwen < 60; +-------+---------+ | class | yuwen | +-------+---------+ | 3 | 49.6667 | +-------+---------+ 1 row in set (0.00 sec)總結
以上是生活随笔為你收集整理的MySQL之算术表达式、聚合函数及GROUP BY 与 HANVING 等函数的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL日志分析
- 下一篇: 在windows系统和linux系统中查