mysql sum计算效率很慢_MySQL基础之分组函数
分組函數主要用于統計,又稱為聚合函數、統計函數或組函數。
常見的分組函數有:
SUM(expr) 求和AVG([DISTINCT] expr) 求平均值MAX(expr) 求最大值MIN(expr) 求最小值COUNT(DISTINCT expr,[expr...]) 計算個數先建一個員工表用于測試,表名emp,包含姓名,部門編號,工作,工資,入職日期,獎金等信息。
CREATE TABLE `emp` ( `id` int(255) NOT NULL AUTO_INCREMENT, `ename` varchar(255) DEFAULT NULL, `job` varchar(255) DEFAULT NULL, `sal` int(11) DEFAULT NULL, `deptNo` int(11) DEFAULT NULL, `hiredate` datetime NOT NULL, `bonus` int(11) DEFAULT NULL, `orderNo` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8簡單插入幾行數據來測試
簡單使用
實例:
#summysql> select sum(sal) as sum from emp;+-------+| sum |+-------+| 37700 |+-------+#avgmysql> select avg(sal) as avg from emp;+-----------+| avg |+-----------+| 3770.0000 |+-----------+#maxmysql> select max(sal) from emp;+----------+| max(sal) |+----------+| 5000 |+----------+#minmysql> select min(sal) from emp;+----------+| min(sal) |+----------+| 2000 |+----------+#countmysql> select count(sal) from emp;+------------+| count(sal) |+------------+| 10 |+------------+搭配其他函數使用
mysql> select round(avg(sal),2) as avg from emp;+---------+| avg |+---------+| 3770.00 |+---------+參數的類型
同時使用數值、字符型和日期參數來測試
sum和avg
mysql> select sum(sal) , SUM(ename), sum(hiredate) from emp;+----------+------------+------------------------+| sum(sal) | SUM(ename) | sum(hiredate) |+----------+------------+------------------------+| 37700 | 0 | 201785163831138.000000 |+----------+------------+------------------------+mysql> select avg(sal) , avg(ename), avg(hiredate) from emp;+-----------+------------+---------------------------+| avg(sal) | avg(ename) | avg(hiredate) |+-----------+------------+---------------------------+| 3770.0000 | 0 | 20178516383113.8010000000 |+-----------+------------+---------------------------+結果中看出,sum和avg的參數是字符和日期時,雖然沒有語法錯誤,但卻是沒有意義的。
max和min
mysql> select max(sal) , max(ename), max(hiredate) from emp;+----------+------------+---------------------+| max(sal) | max(ename) | max(hiredate) |+----------+------------+---------------------+| 5000 | Zara | 2019-06-03 18:30:39 |+----------+------------+---------------------+mysql> select min(sal) , min(ename), min(hiredate) from emp;+----------+------------+---------------------+| min(sal) | min(ename) | min(hiredate) |+----------+------------+---------------------+| 2000 | Anette | 2016-02-10 18:32:03 |+----------+------------+---------------------+字符和日期也是可以排序的,有可比較性,所以它們作為max和min的參數也能得到有意義的結果。
count
mysql> select count(sal) , count(ename), count(hiredate) from emp;+------------+--------------+-----------------+| count(sal) | count(ename) | count(hiredate) |+------------+--------------+-----------------+| 10 | 10 | 10 |+------------+--------------+-----------------+同樣,count使用字符型和日期也是有意義的。
MySQL中函數使用的參數,不但要符合語法,并且要有意義。關于它們的參數類型,我們可以得出結論:
是否忽略null
以emp表中的bonus列來測試。
先看一下數據
其中有5行的值是null,5行是非null。
sum與avg實例:
mysql> select sum(bonus), avg(bonus), sum(bonus)/5, sum(bonus)/10 from emp;+------------+------------+--------------+---------------+| sum(bonus) | avg(bonus) | sum(bonus)/5 | sum(bonus)/10 |+------------+------------+--------------+---------------+| 1650 | 330.0000 | 330.0000 | 165.0000 |+------------+------------+--------------+---------------+首先,和是1650,我們通過計算能夠知道,它與所有bonus值非null的行的加起來是一樣的。
還有,和除以5的結果與agv計算的平均值相等,也就是說平均值的計算也是在非null的行中計算的。
所以sum和avg是忽略null的。
max和min
mysql> select max(bonus), min(bonus) from emp;+------------+------------+| max(bonus) | min(bonus) |+------------+------------+| 500 | 200 |+------------+------------+max和min明顯也是是忽略null的,否則在結果中,將會出現max的值或者min的值為null的情況了。
count
mysql> select count(bonus) from emp;+--------------+| count(bonus) |+--------------+| 5 | +--------------+結果只有5行,顯然count也是忽略null的。
所以,以上組合函數都是忽略null值的。我們在使用的時候要考慮字段值是否為null的情況。
和distinct搭配使用達到去重的效果
以sum為例:
mysql> select sum(DISTINCT sal), sum(sal) from emp;+-------------------+----------+| sum(DISTINCT sal) | sum(sal) |+-------------------+----------+| 32700 | 37700 |+-------------------+----------+1 row in set (0.00 sec)表中有兩個人的sal是5000,所去重后結果比沒去重的少5000沒錯。
好了,對于分組函數的分享就到此。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql sum计算效率很慢_MySQL基础之分组函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: trc是什么币种
- 下一篇: 50欧元去银行换尴尬吗 去银行换50欧元