mysql横竖表转换 mysql字段横向显示

导读:
在MySQL中,我们经常需要对数据进行横向显示 。例如 , 将某个表的多行数据转化为一行数据展示 。这时候,就需要用到字段横向显示的方法 。本文将介绍如何使用MySQL实现字段横向显示 。
正文:
1. 使用GROUP_CONCAT函数
GROUP_CONCAT函数是MySQL中的一个聚合函数 , 它可以将一列数据拼接成一个字符串 。我们可以利用这个特性,将多行数据拼接成一行数据 。
例如,我们有一个表格students,其中包含学生姓名和所学科目:
【mysql横竖表转换 mysql字段横向显示】| name | subject |
| ---- | ------- |
| Tom | Math |
| Tom | English |
| Jack | Math |
| Jack | Physics |
| Lily | English |
我们想要将每个学生所学的所有科目都放在一行中显示,可以使用以下SQL语句:
SELECT name, GROUP_CONCAT(subject) AS subjects
FROM students
GROUP BY name;
输出结果如下:
| name | subjects |
| ---- | ---------------- |
| Tom | Math,English |
| Jack | Math,Physics |
| Lily | English |
2. 使用CASE WHEN语句
如果我们想要将每个学生所学的科目分别放在不同的列中显示 , 可以使用CASE WHEN语句 。
例如,我们有一个表格scores,其中包含学生姓名、所学科目和成绩:
| name | subject | score |
| ---- | ------- | ----- |
| Tom | Math | 90 |
| Tom | English | 80 |
| Jack | Math | 85 |
| Jack | Physics | 75 |
| Lily | English | 95 |
我们想要将每个学生所学的科目和成绩分别放在不同的列中显示,可以使用以下SQL语句:
SELECT name,
MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END) AS math_score,
MAX(CASE WHEN subject = 'English' THEN score ELSE NULL END) AS english_score,
MAX(CASE WHEN subject = 'Physics' THEN score ELSE NULL END) AS physics_score
FROM scores
| name | math_score | english_score | physics_score |
| ---- | ----------| --------------| --------------|
| Tom | 90 | 80 | NULL |
| Jack | 85 | NULL | 75 |
| Lily | NULL | 95 | NULL |
总结:
字段横向显示是MySQL中比较常用的操作之一 。使用GROUP_CONCAT函数可以将多行数据拼接成一行数据;而使用CASE WHEN语句则可以将多行数据转化为多列数据 。掌握这些方法,可以更方便地对数据进行处理 。

    推荐阅读