因Steam價格問題 Valve或將面臨反壟斷訴訟
阿新 • • 發佈:2022-05-11
MySQL 函式
詳細見官方參考手冊 參考手冊
1、常見函式
常見函式彙總練習
-- 數學運算函式 SELECT ABS(-8); -- 絕對值 /8/ SELECT CEILING(-1.2) ;-- 向上取整 /-1/ SELECT FLOOR(9.4);-- 向下取整 /9/ SELECT RAND(); -- 返回一個0~1之間的隨機數 SELECT SIGN(0); -- 判斷一個數的符號,0 返回0 負數返回-1 正數返回1 /0/ -- 字串函式(字串起始位置為1) SELECT CHAR_LENGTH('無關風月'); -- 字串長度 /4/ SELECT CONCAT('無','關','風','月'); -- 拼接字串 /無關風月/ SELECT INSERT('wgfy,我題序等你回',1,4,'無關風月'); -- 插入,替換(1,4代表從1位置開始替換長度為4) /無關風月,我題序等你回/ SELECT LOWER('Viper'); -- 全部小寫 /viper/ SELECT UPPER('viper'); -- 全部大寫 /VIPER/ SELECT INSTR('viper','a'); -- 返回第一次出現的子串的索引,若沒有則返回0 /0/ SELECT REPLACE('永和XX,歲在癸丑','XX','九年'); -- 替換出現的指定字串 /永和九年,歲在癸丑/ SELECT SUBSTR('永和九年,歲在癸丑', 6, 100); -- 返回指定的子字串(源字串,擷取的位置,擷取的長度)擷取長度可以超出字串長度 /歲在癸丑/ SELECT REVERSE('會於會稽山陰之蘭亭'); -- 反轉 /亭蘭之陰山稽會於會/ -- 時間和日期函式(記住!) SELECT CURRENT_DATE(); -- 獲取當前日期(年月日) SELECT CURDATE(); -- 獲取當前日期簡寫 SELECT NOW(); -- 獲取當前的時間(年月日時分秒) SELECT LOCALTIME(); -- 獲取本地時間 SELECT SYSDATE(); -- 獲取系統時間 SELECT YEAR(NOW()); -- 年 SELECT MONTH(NOW()); -- 月 SELECT DAY(NOW()); -- 日 SELECT HOUR(NOW()); -- 時 SELECT MINUTE(NOW()); -- 分 SELECT SECOND(NOW()); -- 秒 -- 系統函式 SELECT SYSTEM_USER(); SELECT USER(); SELECT VERSION();
2、聚合函式及分組過濾
函式
函式 | 描述 |
---|---|
count() |
計數 |
sum() |
求和 |
avg() |
平均值 |
max() |
最大值 |
min() |
最小值 |
聚合函式練習(基於school1資料庫)
因為最後一個練習是查詢不同課程的分,所以要用group by 進行分組
因為要過濾掉均分在60分以下的科目,所以要用having
-- 聚合函式 -- 用於統計表中資料 -- 統計表中記錄數(行數) -- 語法是:COUNT() -- 1.COUNT(欄位名) 會忽略所有的null值(想查詢一個表中有多少個記錄,就使用這個) SELECT COUNT(studentname) FROM student; -- 9 -- 2.COUNT(*) 不會忽略所有的null值 本質是 計算行數 SELECT COUNT(*) FROM student; -- 3.COUNT(1) 不會忽略所有的null值 本質是 計算行數 SELECT COUNT(1) FROM student; SELECT SUM(studentresult) AS '總和' FROM result; -- 1829 SELECT AVG(studentresult) AS '平均分' FROM result; -- 76.2083 SELECT MAX(studentresult) AS '最高分' FROM result; -- 100 SELECT MIN(studentresult) AS '最低分' FROM result; -- 45 -- 查詢不同課程(所以用 group by)的平均分,最高分,最低分 -- 練習:查詢不同課程的 平均分,最高分,最低分(過濾掉均分在60分以下的科目) SELECT sub.subjectname AS '課程', AVG(res.studentresult) AS '平均分', MAX(res.studentresult) AS '最高分', MIN(res.studentresult) AS '最低分' FROM `result` res INNER JOIN `subject` sub ON res.`subjectno`=sub.`subjectno` GROUP BY res.`subjectno` -- 制定結果按照 `result` 表的 `subjectno`欄位來分組 HAVING AVG(res.studentresult) >=60; -- 過濾分組的記錄必須滿足的次要條件為 過濾掉均分在60分以下的科目
如下圖,均分在60以下的科目被過濾掉了