mysql查询行转列
时间: 2023-08-18 09:14:48 浏览: 114
在MySQL中,可以使用一些技巧将行转列。下面是一种常见的方法,使用了聚合函数和CASE语句:
```sql
SELECT
id,
MAX(CASE WHEN attribute = 'attribute1' THEN value END) AS attribute1,
MAX(CASE WHEN attribute = 'attribute2' THEN value END) AS attribute2,
MAX(CASE WHEN attribute = 'attribute3' THEN value END) AS attribute3
FROM
your_table
GROUP BY
id;
```
在上面的查询中,你需要替换`your_table`为你的表名,`id`为你的行标识列,`attribute`为需要转换的列名,`value`为需要转换的值。通过使用CASE语句,对每个需要转换的列进行条件判断,并使用聚合函数MAX将其转换为单独的列。
这样查询结果将会是每个行标识对应的每个转换列的值。
相关问题
mysql查询 行转列
以下是MySQL查询行转列的方法:
假设有如下表结构:
```
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`subject` varchar(50) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;```
表中有如下数据:
```
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('张三', '语文', 80);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('张三', '数学', 90);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('张三', '英语', 70);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('李四', '语文', 85);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('李四', '数学', 95);
INSERT INTO `test` (`name`, `subject`, `score`) VALUES ('李四', '英语', 75);
```
现在需要将每个人的成绩转换为一行,列名为科目,行名为姓名,可以使用如下SQL语句:
```
SELECT
name,
MAX(CASE WHEN subject = '语文' THEN score ELSE NULL END) AS '语文',
MAX(CASE WHEN subject = '数学' THEN score ELSE NULL END) AS '数学',
MAX(CASE WHEN subject = '英语' THEN score ELSE NULL END) AS '英语'
FROM
test
GROUP BY
name;
```
执行以上SQL语句后,将得到如下结果:
```
+------+----+----+----+
| name | 语文 | 数学 | 英语 |
+------+----+----+----+
| 张三 | 80 | 90 | 70 |
| 李四 | 85 | 95 | 75 |
+------+----+----+----+
```
mysql 如何行转列
在 MySQL 中,可以使用 `GROUP BY` 和 `CASE` 语句来进行行转列的操作。以下是一个示例:
假设有以下数据:
```
id | name | score
---------------------
1 | Tom | 80
1 | Tom | 90
1 | Tom | 85
2 | Jack | 70
2 | Jack | 75
2 | Jack | 80
```
要将每个人的成绩转换为一行,可以使用以下查询:
```
SELECT id, name,
MAX(CASE WHEN row_number = 1 THEN score END) AS score1,
MAX(CASE WHEN row_number = 2 THEN score END) AS score2,
MAX(CASE WHEN row_number = 3 THEN score END) AS score3
FROM (
SELECT id, name, score,
ROW_NUMBER() OVER (PARTITION BY id, name ORDER BY score DESC) AS row_number
FROM scores
) AS t
GROUP BY id, name
```
这将生成以下结果:
```
id | name | score1 | score2 | score3
--------------------------------------------
1 | Tom | 90 | 85 | 80
2 | Jack | 80 | 75 | 70
```
其中,每个人的最高分数为 `score1`,第二高分数为 `score2`,第三高分数为 `score3`。
阅读全文