欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql 行轉列查詢

黃文隆2年前6瀏覽0評論

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()函數則是為了將合并后的字符串展示成一個單獨的列。