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

mysql列轉行術語

榮姿康2年前7瀏覽0評論

MySQL中的列轉行是一種數據轉換技術。在某些情況下,一些數據可能以列的形式存儲在表中。但是,在數據處理時,通常需要將這些數據轉換為行的形式以更方便地操作和分析。MySQL提供了幾種方法來實現這種轉換,下面介紹一些常用的術語。

-- 示例表結構
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`score1` int(11) DEFAULT NULL,
`score2` int(11) DEFAULT NULL,
`score3` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
-- 示例數據
INSERT INTO `demo` (`name`, `score1`, `score2`, `score3`) VALUES
('小明', 80, 90, 70),
('小紅', 90, 85, 95),
('小張', 70, 75, 80);

1. 使用UNION ALL實現列轉行

使用UNION ALL操作符可以將多個SELECT語句的結果合并成一個結果集。具體實現方式是把每列數據作為一個SELECT語句中的一列,在每個SELECT語句中查詢一個列,然后將結果集合并起來。以下是示例代碼:

SELECT name, 'score1' AS subject, score1 AS score FROM demo
UNION ALL
SELECT name, 'score2' AS subject, score2 AS score FROM demo
UNION ALL
SELECT name, 'score3' AS subject, score3 AS score FROM demo;

2. 使用CASE WHEN實現列轉行

使用CASE WHEN語句可以實現在一條SELECT語句中查詢多列數據,將數據轉換為行的形式。以下是示例代碼:

SELECT name,
CASE
WHEN subject = 'score1' THEN score1
WHEN subject = 'score2' THEN score2
WHEN subject = 'score3' THEN score3
END AS score
FROM demo
CROSS JOIN (SELECT 'score1' AS subject UNION ALL SELECT 'score2' UNION ALL SELECT 'score3') AS s;

3. 使用GROUP BY實現列轉行

使用GROUP BY語句可以將數據分組,然后將每一組的數據合并成一行。例如,可以把每個學生的三個成績作為一組數據,然后將每組數據合并成一個結果集。以下是示例代碼:

SELECT name,
MAX(CASE WHEN subject = 'score1' THEN score END) AS score1,
MAX(CASE WHEN subject = 'score2' THEN score END) AS score2,
MAX(CASE WHEN subject = 'score3' THEN score END) AS score3
FROM demo
CROSS JOIN (SELECT 'score1' AS subject UNION ALL SELECT 'score2' UNION ALL SELECT 'score3') AS s
GROUP BY name;

以上是MySQL中常用的列轉行術語,可以根據實際業務場景選擇合適的方法,提高數據處理效率。