好不容易產出自己要的資訊,該如何有序地整理?
擅長使用excel 的朋友一定不陌生使用「篩選」並將資料: 降冪 or 升冪排序,或者使用 樞紐分析表 pivot table 快速探索資料,那在SQL實踐中,你會需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY)!
何時使用GROUP BY
和ORDER BY
頗重要,牧牧初入門常被絆住,這兩個語句分別有不同的用途:
GROUP BY
的使用時機GROUP BY
用於將查詢結果集中的行分組成較小的集合。ORDER BY
的使用時機ORDER BY
用於對查詢結果的行進行排序。假設有一個employees
表,包含department
, salary
等列。
sqlCopy codeSELECT department, AVG(salary) AS average_salary這裡使用
FROM employees
GROUP BY department;
GROUP BY
按部門分組,然後計算每個部門的平均薪資。sqlCopy codeSELECT * FROM employees這裡使用
ORDER BY salary DESC;
ORDER BY
按薪資降序排列所有員工的記錄。簡單來說,當你想要對數據進行匯總或按組統計時,使用GROUP BY
;當你想要改變查詢結果的顯示順序時,使用ORDER BY
。
ORDER BY
的注意事項假設有一個user_profile
表,包含device_id
, gpa
,age
等列。
若我想按gpa降序排序,然後在gpa相同的情況下按age降序排序:
sqlCopy codeSELECT device_id, gpa, age
FROM user_profile
ORDER BY gpa DESC, age DESC
在SQL中,當指定多個排序條件時,每個排序條件都需要指明是升序(ASC)還是降序(DESC)。如果沒有為每個條件明確指定,那麼只有第一個條件被認為是指定的排序方式,其餘條件默認為升序。
這樣,SQL查詢首先會按gpa進行降序排序,如果有兩個用戶的gpa相同,則會按他們的age進行降序排序。
EXCEL大神們面對長長的資料串,除了使用函數 left or right之外,處理大批量資料的話對「資料剖析」按照 分隔符號 或 固定寬度拆分,想必不陌生!
在SQL 中也有類似的函數 SUBSTRING_INDEX
假設有一個profile
欄位,其值是像"180cm,75kg,27,male"
這樣的字符串,包含了四部分信息:身高、體重、年齡、性別,且這些信息由逗號分隔。
我要如何單純提取年齡?
當使用SUBSTRING_INDEX(profile, ",", 3)
函數時,這是怎麼工作的:
SUBSTRING_INDEX
是一個字符串函數,用來根據指定的分隔符(在這裡是逗號,
)來分割字符串。profile
。,
。3
,意味著從左邊開始數,要提取直到第三個逗號之前的所有內容。因此,SUBSTRING_INDEX(profile, ",", 3)
會從"180cm,75kg,27,male"
中提取出"180cm,75kg,27"
。從開頭到第三個逗號之前的部分,也就是包括身高、體重和年齡,性別部分不在此次提取的範圍。
當再次使用SUBSTRING_INDEX(profile, ",", -1)
函數時,這是怎麼工作的:
SUBSTRING_INDEX
函數,這次是以","為分隔符,使用-1作為第三個參數。這告訴函數從字符串的右側開始計數,並提取最後一個逗號之後的所有內容。在我們的例子中,這意味著從"180cm,75kg,27"中提取出"27",也就是年齡。
熟悉這些指令,可以幫助我們再使用SQL時,如同使用EXCEL 單次對大批量的資料進行處理!