MySQL中行轉列查詢,也叫做數據逆行轉置查詢。是在一個查詢語句中將數據庫的行轉換為列的一種技巧。
在某些情況下,我們需要對一個表格中的行數據進行橫向展示,將每行數據拆解為多列、單行顯示。例如,我們需要按照每個人的身高、年齡、收入等信息排序,顯示結果如下:
姓名 身高 年齡 收入 張三 175cm 30歲 5000元 李四 180cm 28歲 6000元 王五 160cm 35歲 3000元 ...
而表中的原始數據可能是這樣的:
姓名 信息類型 信息內容 張三 身高 175cm 張三 年齡 30歲 張三 收入 5000元 李四 身高 180cm 李四 年齡 28歲 李四 收入 6000元 王五 身高 160cm 王五 年齡 35歲 王五 收入 3000元 ...
MySQL行轉列查詢的實現方式常見的有使用CASE WHEN語句和使用GROUP_CONCAT()函數。
使用CASE WHEN語句實現行轉列查詢
使用CASE WHEN語句實現行轉列查詢的核心思路是根據行數據的信息類型進行分組,并在分組后的數據中分別列出需要展示的列。代碼如下:
SELECT 姓名, MAX(CASE WHEN 信息類型 = '身高' THEN 信息內容 ELSE NULL END) AS 身高, MAX(CASE WHEN 信息類型 = '年齡' THEN 信息內容 ELSE NULL END) AS 年齡, MAX(CASE WHEN 信息類型 = '收入' THEN 信息內容 ELSE NULL END) AS 收入 FROM 表名 GROUP BY 姓名;
其中MAX函數的作用是用于匯總行的信息數據,如果不加MAX函數會展示所有信息內容。
使用GROUP_CONCAT()函數實現行轉列查詢
使用GROUP_CONCAT()函數實現行轉列查詢則是根據信息類型進行分組,并把所有分組后的信息內容合并成一個字符串,通過CONCAT()函數對結果字符串進行拼接。代碼如下:
SELECT 姓名, CONCAT(GROUP_CONCAT(CASE WHEN 信息類型 = '身高' THEN 信息內容 ELSE NULL END), ',') AS 身高, CONCAT(GROUP_CONCAT(CASE WHEN 信息類型 = '年齡' THEN 信息內容 ELSE NULL END), ',') AS 年齡, CONCAT(GROUP_CONCAT(CASE WHEN 信息類型 = '收入' THEN 信息內容 ELSE NULL END), ',') AS 收入 FROM 表名 GROUP BY 姓名;
GROUP_CONCAT()函數可以將分組后的信息內容按照指定的分隔符進行合并,常用的分隔符是逗號“,”。代碼中的CONCAT()函數則是為了將合并后的字符串展示成一個單獨的列。
上一篇css選擇器種類和作用
下一篇mysql 行轉列轉行