首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 常用聚合統計與字符串處理函數速查表

     編輯:MySQL 綜合教學

聚合統計函數

函數說明示例
COUNT(*)統計行數 (含 NULL)SELECT COUNT(*) FROM users;
COUNT(col)統計非 NULL 個數SELECT COUNT(email) FROM users;
SUM(col)求和SELECT SUM(amount) FROM orders;
AVG(col)平均值SELECT AVG(score) FROM exams;
MAX/MIN(col)最大/最小值SELECT MAX(created_at) FROM logs;
GROUP_CONCAT(col SEPARATOR ',')分組拼接字符串SELECT dept_id, GROUP_CONCAT(name) FROM emp GROUP BY dept_id;
STDDEV/Variance標準差/方差SELECT STDDEV(salary) FROM employees;

字符串處理函數

函數說明示例
CONCAT(s1, s2, ...)拼接字符串SELECT CONCAT(first_name, ' ', last_name) FROM users;
CONCAT_WS(sep, s1, s2)帶分隔符拼接 (自動跳過 NULL)SELECT CONCAT_WS('-', year, month, day) FROM dates;
SUBSTRING(str, pos, len)截取子串 (1-based)SELECT SUBSTRING(phone, 1, 3) AS area_code FROM users;
LEFT/RIGHT(str, len)左/右截取SELECT LEFT(id_card, 6) AS region_code FROM users;
TRIM([BOTH|LEADING|TRAILING] 'x' FROM str)去除首尾字符SELECT TRIM(' ' FROM name) FROM users;
REPLACE(str, from, to)替換所有匹配UPDATE users SET phone = REPLACE(phone, '-', '');
UPPER/LOWER(str)大小寫轉換SELECT LOWER(email) FROM users;
LENGTH/CHAR_LENGTH(str)字節長度/字符長度SELECT CHAR_LENGTH(name) FROM users;
LOCATE(substr, str, [pos])查找子串位置SELECT LOCATE('@', email) FROM users;
LPAD/RPAD(str, len, padstr)左/右填充SELECT LPAD(id, 8, '0') FROM users;

日期時間函數

函數說明示例
NOW() / CURRENT_TIMESTAMP當前日期時間INSERT INTO logs VALUES (NOW(), 'msg');
CURDATE() / CURTIME()當前日期/時間WHERE created_at >= CURDATE()
DATE_ADD/DATE_SUB(date, INTERVAL expr unit)日期加減WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
DATEDIFF(date1, date2)日期差 (天)SELECT DATEDIFF(NOW(), hiredate) FROM emp;
DATE_FORMAT(date, format)格式化輸出SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i') FROM logs;
STR_TO_DATE(str, format)字符串解析為日期WHERE created_at = STR_TO_DATE('2023-01-01', '%Y-%m-%d')
UNIX_TIMESTAMP([date])轉時間戳SELECT UNIX_TIMESTAMP() * 1000 AS ms;
FROM_UNIXTIME(ts)時間戳轉日期時間SELECT FROM_UNIXTIME(1672567200);
LAST_DAY(date)月份最後一天SELECT LAST_DAY('2023-02-15'); -- 2023-02-28

條件與流程函數

函數說明示例
IF(condition, true_val, false_val)三元運算SELECT IF(score >= 60, 'Pass', 'Fail') FROM exams;
CASE WHEN cond THEN val ... ELSE val END多分支SELECT CASE WHEN age < 18 THEN 'Minor' ELSE 'Adult' END FROM users;
COALESCE(val1, val2, ...)返回第一個非 NULLSELECT COALESCE(phone, email, 'N/A') FROM users;
NULLIF(val1, val2)相等返回 NULLSELECT NULLIF(qty, 0) FROM inventory;
IFNULL(val1, val2)MySQL 專用 COALESCE 兩參數版SELECT IFNULL(bonus, 0) FROM salary;

實戰案例:某欄位值出現次數統計 (原文補充)

-- 需求:統計 vpdm 欄位各值出現頻次
SELECT `vpdm`, COUNT(*) AS freq 
FROM `ipos_qtlsd` 
GROUP BY `vpdm` 
ORDER BY freq DESC;

進階:窗口函數 (MySQL 8.0+)

-- 行號、排名、分組內排序
SELECT 
    `name`, `dept`, `salary`,
    ROW_NUMBER() OVER (PARTITION BY `dept` ORDER BY `salary` DESC) AS rn,
    RANK() OVER (PARTITION BY `dept` ORDER BY `salary` DESC) AS rk,
    LAG(`salary`) OVER (PARTITION BY `dept` ORDER BY `salary`) AS prev_sal
FROM `employees`;

總結

掌握上述核心函數可覆蓋 90%+ 日常開發需求。關鍵注意點:字符串函數區分字節/字符長度、日期格式化模板大小寫敏感、聚合函數自動忽略 NULL (除 COUNT(*))、窗口函數需 8.0+。複雜邏輯優先在 SQL 完成,減少應用層數據傳輸與處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved