天天看點

MySQL 學習第四天—函數一、MySQL函數二、題目

文章目錄

  • 一、MySQL函數
    • 1. 資料函數
    • 2. 日期函數
    • 3. 字元串函數
    • 4. 聚合函數
  • 二、題目

一、MySQL函數

1. 資料函數

SELECT ABS(-1) -- 傳回絕對值
SELECT CEILING(1.5); -- 向上取整
SELECT FLOOR(1.5) -- 向下取整
SELECT RAND(); -- 随機數,傳回一個0-1之間的随機數
SELECT SIGN(-10) -- (-1)符号函數:負數為-1,正數為1,0為0
           

2. 日期函數

SELECT CURRENT_DATE(); -- 傳回目前日期
SELECT CURDATE(); -- 傳回目前日期
SELECT CURRENT_TIME(); -- 傳回目前時間
SELECT CURRENT_TIMESTAMP(); -- 傳回目前日期和時間
SELECT LOCALTIME(); -- 傳回目前日期和時間
SELECT NOW(); -- 傳回目前日期和時間
SELECT SYSDATE(); -- 傳回目前日期和時間
           

3. 字元串函數

SELECT CHAR_LENGTH("RUNOOB") AS LengthOfString; -- 傳回字元串 s 的字元數
SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString; -- 合并多個字元串
SELECT INSERT("google.com", 1, 6, "runnob");  -- 輸出:runoob.com ,字元串 s2 替換 s1 的 x 位置開始長度為 len 的字元串
SELECT LOWER('RUNOOB') -- runoob,字元串轉換為小寫
SELECT REPLACE('abc','a','x') --xbc,将字元串 s2 替代字元串 s 中的字元串 s1
SELECT REVERSE('abc') -- cba,将字元串s的順序反過來
SELECT UPPER("runoob"); -- RUNOOB,将字元串轉換為大寫
SELECT LEFT('runoob',2) -- ru,傳回字元串 s 的前 n 個字元
SELECT RIGHT('runoob',2) -- ob,傳回字元串 s 的後 n 個字元
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO,從字元串 s 的 start 位置截取長度為 length 的子字元串
           

4. 聚合函數

  • AVG (平均)
  • COUNT (計數)
  • MAX (最大值)
  • MIN (最小值)
  • SUM (總合)
AVG 通常為數值字段或表達列作統計,傳回一列的平均值
SELECT AVG(Price) AS AveragePrice FROM Products; -- 傳回 Products 表中Price 字段的平均值:
           
COUNT 傳回滿足Select條件的記錄總和數,如 select count(*) 【不建議使用 *,效率低】
SELECT COUNT(studentname) FROM student;
 SELECT COUNT(*) FROM student;
 SELECT COUNT(1) FROM student; 
 
 -- count(字段) 會統計該字段在表中出現的次數,忽略字段為null 的情況。即不統計字段為null 的記錄。
 -- count(*) 包括了所有的列,相當于行數,在統計結果的時候,包含字段為null 的記錄;
 -- count(1) 用1代表代碼行,在統計結果的時候,包含字段為null 的記錄 。
           
MAX 可以為數值字段,字元字段或表達式列作統計,傳回最大的值。NULL值不包括在計算中
-- 列出表 Orders 字段 OrderPrice 列最大值,
-- 結果集列不顯示 OrderPrice 顯示 LargestOrderPrice
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
           
MIN MIN 函數傳回一列中的最小值。NULL 值不包括在計算中
SELECT MIN(column_name) FROM table_name
           
SUM SUM 函數傳回數值列的總數(總額)
SELECT SUM(column_name) FROM table_name
           

二、題目

-- 查詢不同課程的平均分,最高分,最低分
 -- 前提:根據不同的課程進行分組
 
 SELECT subjectname,AVG(studentresult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分
 FROM result AS r
 INNER JOIN `subject` AS s
 ON r.subjectno = s.subjectno
 GROUP BY r.subjectno
 HAVING 平均分>80;
 
 /*
 where寫在group by前面.
 要是放在分組後面的篩選
 要使用HAVING..
 因為having是從前面篩選的字段再篩選,而where是從資料表中的>字段直接進行的篩選的
 */
           

附上狂神的連結:https://www.bilibili.com/video/BV1NJ411J79W?p=30