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

MySQL 必知必會(六):計算欄位、函數、彙總與分組進階

     編輯:MySQL 綜合教學

10. 計算欄位

不儲存於表中,查詢時即時計算。

10.1 字串拼接 CONCAT()

SELECT CONCAT(RTRIM(vend_name), ' (', RTRIM(vend_country), ')') AS vend_title
FROM vendors ORDER BY vend_name;
/* 結果:
ACME (USA)
Anvils R Us (USA)
... */

10.2 別名 AS

賦予計算欄位有意義名稱,供應用層或後續 ORDER BY/GROUP BY 引用。

10.3 算術運算

SELECT prod_id, quantity, item_price,
       quantity * item_price AS expanded_price
FROM orderitems WHERE order_num = 20005;

11. 資料處理函數

11.1 文本函數速查

函數說明
LEFT/RTRIM/LTRIM截取/去左右空白
LOWER/UPPER大小寫轉換
SUBSTRING/LOCATE子串/定位
SOUNDEX發音匹配(英文名去重神器)
-- 發音匹配範例:查找發音像 'Y Lie' 的聯繫人
SELECT cust_name, cust_contact
FROM customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Y Lie');
-- 命中 'Y Lee'

11.2 日期時間函數精選

  • NOW() / CURDATE() / CURTIME():當前日期時間/日期/時間。
  • DATE_ADD() / DATE_SUB():靈活加減天/月/年。
  • DATEDIFF():兩日期天數差。
  • DATE_FORMAT():格式化輸出,如 '%Y-%m-%d'。
SELECT cust_id, order_num
FROM orders
WHERE DATE(order_date) = '2005-09-01';

11.3 數值函數

ABS()、ROUND()、RAND()、SQRT()、MOD() 等標準數學函數。

12. 彙總函數

函數說明
AVG()平均值,忽略 NULL
COUNT()行數,COUNT(*) 含 NULL
MAX()/MIN()極值
SUM()求和
-- 去重平均價
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products WHERE vend_id = 1003;

13. 分組查詢 GROUP BY

13.1 基礎分組

SELECT vend_id, COUNT(*) AS num_prods
FROM products GROUP BY vend_id;

13.2 重要規則

  1. SELECT 非彙總欄位必須出現在 GROUP BY 中。
  2. 可多欄分組(巢狀),順序決定層級。
  3. NULL 視為獨立一組。
  4. 子句順序:WHERE → GROUP BY → HAVING → ORDER BY。

13.3 分組過濾 HAVING vs WHERE

-- 訂單數 >= 2 的客戶
SELECT cust_id, COUNT(*) AS orders
FROM orders GROUP BY cust_id
HAVING COUNT(*) >= 2;

WHERE 過濾行(分組前),HAVING 過濾組(分組後)。

13.4 分組排序

SELECT vend_id, COUNT(*) AS num_prods
FROM products GROUP BY vend_id
ORDER BY num_prods DESC;

下一篇將講解 多表關聯(JOIN)與子查詢 進階技巧。

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