色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql 行轉(zhuǎn)列查詢

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

MySQL中行轉(zhuǎn)列查詢,也叫做數(shù)據(jù)逆行轉(zhuǎn)置查詢。是在一個查詢語句中將數(shù)據(jù)庫的行轉(zhuǎn)換為列的一種技巧。

在某些情況下,我們需要對一個表格中的行數(shù)據(jù)進行橫向展示,將每行數(shù)據(jù)拆解為多列、單行顯示。例如,我們需要按照每個人的身高、年齡、收入等信息排序,顯示結(jié)果如下:

姓名	身高	年齡	收入
張三	175cm	30歲	5000元
李四	180cm	28歲	6000元
王五	160cm	35歲	3000元
...

而表中的原始數(shù)據(jù)可能是這樣的:

姓名	信息類型	信息內(nèi)容
張三	身高	175cm
張三	年齡	30歲
張三	收入	5000元
李四	身高	180cm
李四	年齡	28歲
李四	收入	6000元
王五	身高	160cm
王五	年齡	35歲
王五	收入	3000元
...

MySQL行轉(zhuǎn)列查詢的實現(xiàn)方式常見的有使用CASE WHEN語句和使用GROUP_CONCAT()函數(shù)。

使用CASE WHEN語句實現(xiàn)行轉(zhuǎn)列查詢

使用CASE WHEN語句實現(xiàn)行轉(zhuǎn)列查詢的核心思路是根據(jù)行數(shù)據(jù)的信息類型進行分組,并在分組后的數(shù)據(jù)中分別列出需要展示的列。代碼如下:

SELECT
姓名,
MAX(CASE WHEN 信息類型 = '身高' THEN 信息內(nèi)容 ELSE NULL END) AS 身高,
MAX(CASE WHEN 信息類型 = '年齡' THEN 信息內(nèi)容 ELSE NULL END) AS 年齡,
MAX(CASE WHEN 信息類型 = '收入' THEN 信息內(nèi)容 ELSE NULL END) AS 收入
FROM
表名
GROUP BY
姓名;

其中MAX函數(shù)的作用是用于匯總行的信息數(shù)據(jù),如果不加MAX函數(shù)會展示所有信息內(nèi)容。

使用GROUP_CONCAT()函數(shù)實現(xiàn)行轉(zhuǎn)列查詢

使用GROUP_CONCAT()函數(shù)實現(xiàn)行轉(zhuǎn)列查詢則是根據(jù)信息類型進行分組,并把所有分組后的信息內(nèi)容合并成一個字符串,通過CONCAT()函數(shù)對結(jié)果字符串進行拼接。代碼如下:

SELECT
姓名,
CONCAT(GROUP_CONCAT(CASE WHEN 信息類型 = '身高' THEN 信息內(nèi)容 ELSE NULL END), ',') AS 身高,
CONCAT(GROUP_CONCAT(CASE WHEN 信息類型 = '年齡' THEN 信息內(nèi)容 ELSE NULL END), ',') AS 年齡,
CONCAT(GROUP_CONCAT(CASE WHEN 信息類型 = '收入' THEN 信息內(nèi)容 ELSE NULL END), ',') AS 收入
FROM
表名
GROUP BY
姓名;

GROUP_CONCAT()函數(shù)可以將分組后的信息內(nèi)容按照指定的分隔符進行合并,常用的分隔符是逗號“,”。代碼中的CONCAT()函數(shù)則是為了將合并后的字符串展示成一個單獨的列。