久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql聚合函數有哪些及怎么使用

148次閱讀
沒有評論

共計 4658 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇“mysql 聚合函數有哪些及怎么使用”文章的知識點大部分人都不太理解,所以丸趣 TV 小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mysql 聚合函數有哪些及怎么使用”文章吧。

AVG 和 SUM

可以對數值型數據使用 AVG 和 SUM 函數

代碼案例

SELECT AVG(salary), SUM(salary), AVG(salary) * 107 FROM employees;
#  錯誤案例:#  如下的操作沒有意義,因為不是數值類型
SELECT SUM(last_name), AVG(last_name), SUM(hire_date) FROM employees;

MIN 和 MAX 函數

可以對任意數據類型的數據使用 MIN 和 MAX 函數

代碼案例

SELECT MAX(salary), MIN(salary) FROM employees;
SELECT MAX(last_name), MIN(last_name), MAX(hire_date), MIN(hire_date) FROM employees;

COUNT 函數

COUNT(*) 返回表中記錄總數,適用于任意數據類型

代碼案例

#  計算指定字段在查詢結構中出現的個數(不包含 NULL 值的)SELECT COUNT(employee_id), COUNT(salary), COUNT(2 * salary), COUNT(1), COUNT(2), COUNT(*) FROM employees;
#  計算表中有多少條記錄
#  方式 1:COUNT(*)
#  方式 2:COUNT(1)
#  方式 3:COUNT(具體字段),不一定對
#  注意:計算指定字段出現的個數時,是不計算 NULL 值的
SELECT COUNT(commission_pct) FROM employees;
#  公式:AVG = SUM / COUNT
SELECT AVG(salary), SUM(salary)/COUNT(salary),
AVG(commission_pct), SUM(commission_pct)/COUNT(commission_pct),
SUM(commission_pct) / 107
FROM employees;
#  查詢公司中平均獎金率
#  錯誤寫法:如果某些人的獎金為 null,則不會計算
SELECT AVG(commission_pct) FROM employees;
#  正確寫法
SELECT SUM(commission_pct) / COUNT(IFNULL(commission_pct,0)),
AVG(IFNULL(commission_pct,0))
FROM employees;
#  如何需要統計表中的記錄數,使用 COUNT(*)、COUNT(1)、COUNT(具體字段)  哪個效率更高
#  如果使用的是 MyISAM  存儲引擎,則三者效率相同,都是 O(1)
#  如果使用的是 InnoDB  存儲引擎,則三者效率:COUNT(*) = COUNT(1)  COUNT(字段)

GROUP BY

可以使用 GROUP BY 子句將表中的數據分成若干組

代碼案例

#  查詢各個部門的平均工資,最高工資
SELECT department_id, AVG(salary), SUM(salary) FROM employees GROUP BY department_id
#  查詢各個 job_id 的平均工資
SELECT job_id, AVG(salary) FROM employees GROUP BY job_id;
#  查詢各個 department_id,job_id 的平均工資
#  方式 1:SELECT department_id, job_id, AVG(salary) FROM employees GROUP BY department_id, job_id;
#  方式 2:SELECT job_id, department_id, AVG(salary) FROM employees GROUP BY job_id,department_id;
#  錯誤寫法:job_id 是非組函數,但沒有寫在 group by 中
SELECT department_id, job_id, AVG(salary)
FROM employees
GROUP BY department_id;
#  錯誤原因:SELECT 中出現的非組函數的字段必須聲明在 GROUP BY  中
#  反之,GROUP BY 中聲明的字段可以不出現在 SELECT 中
# GROUP BY  聲明在 FROM 后面、WHERE 后面,ORDER BY  前面、LIMIT 前面
# MySQL 中 GROUP BY 中使用 WITH ROLLUP,用于統計
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id WITH ROLLUP;
#  查詢各個部門的平均工資,按照平均工資升序排列
SELECT department_id, AVG(salary) avg_sal
FROM employees
GROUP BY department_id
ORDER BY avg_sal ASC;
#  當使用 ROLLUP 時,不能同時使用 ORDER BY 子句進行結果排序,即 ROLLUP 和 ORDER BY 是互相排斥的
#  錯誤寫法
SELECT department_id, AVG(salary) avg_sal
FROM employees
GROUP BY department_id WITH ROLLUP
ORDER BY avg_sal ASC;

HAVING

簡介

1.  行已經被分組
2.  使用了聚合函數
3.  滿足 HAVING  子句中條件的分組將被顯示
4. HAVING  不能單獨使用,必須要跟  GROUP BY  一起使用 

代碼案例

#  查詢各個部門中最高工資比 10000 高的部門信息
#  錯誤寫法:不能在  WHERE  子句中使用聚合函數
SELECT department_id, MAX(salary)
FROM employees
WHERE MAX(salary)   10000
GROUP BY department_id;
#  如果過濾條件中使用了聚合函數,則必須使用 HAVING 來替換 WHERE。否則會報錯
# HAVING  必須聲明在  GROUP BY  的后面
#正確的寫法:SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)   10000;
#  開發中,我們使用 HAVING 的前提是 SQL 中使用了 GROUP BY,也即是說使用了 having 就必須使用 group by
#  查詢部門 id 為 10,20,30,40 這 4 個部門中最高工資比 10000 高的部門信息
#  方式 1:推薦,執行效率高于方式 2
SELECT department_id, MAX(salary)
FROM employees
WHERE department_id IN (10,20,30,40)
GROUP BY department_id
HAVING MAX(salary)   10000;
#方式 2:SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)   10000 AND department_id IN (10,20,30,40);
#  當過濾條件中有聚合函數時,則此過濾條件必須聲明在 HAVING 中
#  當過濾條件中沒有聚合函數時,則此過濾條件聲明在 WHERE 中或 HAVING 中都可以。但建議聲明在 WHERE 中
 * WHERE  與  HAVING  的對比
 * 1.  從適用范圍上來講,HAVING 的適用范圍更廣。 * 2.  如果過濾條件中沒有聚合函數:這種情況下,WHERE 的執行效率要高于 HAVING
 */

sql 語句書寫順序

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...

sql 語句執行順序

FROM -  WHERE -  GROUP BY -  HAVING -  SELECT  的字段  -  DISTINCT -  ORDER BY -  LIMIT

課后練習

# 1. where 子句不能使用組函數進行過濾
# 2. 查詢公司員工工資的最大值,最小值,平均值,總和
SELECT MAX(salary) max_sal, MIN(salary) mim_sal, AVG(salary) avg_sal, SUM(salary) sum_sal FROM employees;
# 3. 查詢各 job_id 的員工工資的最大值,最小值,平均值,總和
SELECT job_id, MAX(salary), MIN(salary), AVG(salary), SUM(salary) FROM employees GROUP BY job_id;
# 4. 選擇具有各個 job_id 的員工人數
SELECT job_id, COUNT(*) FROM employees GROUP BY job_id;
# 5. 查詢員工最高工資和最低工資的差距(DIFFERENCE)SELECT MAX(salary) - MIN(salary)  DIFFERENCE  FROM employees;

# 6. 查詢各個管理者手下員工的最低工資,其中最低工資不能低于 6000,沒有管理者的員工不計算在內 SELECT manager_id, MIN(salary) FROM employees WHERE manager_id IS NOT NULL GROUP BY manager_id HAVING MIN(salary)  = 6000; # 7. 查詢所有部門的名字,location_id,員工數量和平均工資,并按平均工資降序   SELECT d.department_name, d.location_id, COUNT(employee_id), AVG(salary)  FROM departments d LEFT JOIN employees e ON d.`department_id` = e.`department_id` GROUP BY department_name, location_id # 8. 查詢每個工種、每個部門的部門名、工種名和最低工資   SELECT d.department_name, e.job_id, MIN(salary) FROM departments d LEFT JOIN employees e ON d.`department_id` = e.`department_id` GROUP BY department_name, job_id

以上就是關于“mysql 聚合函數有哪些及怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望丸趣 TV 小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計4658字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 石棉县| 景宁| 洮南市| 宣化县| 永济市| 潼关县| 兰州市| 丹阳市| 蓬溪县| 泾川县| 开阳县| 涟源市| 尉犁县| 神木县| 宁国市| 志丹县| 汉沽区| 广汉市| 正定县| 鄂伦春自治旗| 嘉峪关市| 临安市| 定南县| 左贡县| 正定县| 湾仔区| 北辰区| 隆林| 澎湖县| 河北省| 那曲县| 荥经县| 平顶山市| 泰安市| 平罗县| 伊宁市| 上饶县| 尖扎县| 盐城市| 济宁市| 林芝县|