1. 程式人生 > 遊戲 >因Steam價格問題 Valve或將面臨反壟斷訴訟

因Steam價格問題 Valve或將面臨反壟斷訴訟

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以下的科目被過濾掉了