MySQL 结果集纵向展示:使用 GROUP_CONCAT 和 SUBSTRING_INDEX 实现
MySQL 查询到的结果集默认是横向展示的,每一行表示一个记录,每一列表示一个字段。如果需要将结果集纵向展示,可以通过 MySQL 的转置函数实现。具体方法如下:
假设查询的结果集如下:
| id | name | age | |----|------|-----| | 1 | Tom | 20 | | 2 | Jack | 25 | | 3 | Lucy | 30 |
要将结果集纵向展示,可以使用 MySQL 的 GROUP_CONCAT 函数和 CONCAT 函数配合使用,具体步骤如下:
-
使用 GROUP_CONCAT 函数将所有记录的字段值拼接成一个字符串。例如,将 id 列的所有值拼接成一个字符串,可以使用以下语句:
SELECT GROUP_CONCAT(id SEPARATOR ',') AS ids FROM table_name;这样就可以得到一个包含所有 id 值的字符串,例如:'1,2,3'。
-
将所有需要展示的字段的值拼接成一个字符串。例如,将所有记录的 id、name、age 三个字段的值拼接成一个字符串,可以使用以下语句:
SELECT CONCAT(GROUP_CONCAT(id SEPARATOR ','), ',', GROUP_CONCAT(name SEPARATOR ','), ',', GROUP_CONCAT(age SEPARATOR ',')) AS values FROM table_name;这样就可以得到一个包含所有记录的 id、name、age 值的字符串,例如:'1,Tom,20,2,Jack,25,3,Lucy,30'。
-
对得到的字符串进行转置操作。可以使用 MySQL 的 SUBSTRING_INDEX 函数将字符串拆分成多个子串,然后再将这些子串按列排列。具体步骤如下:
-
使用 SUBSTRING_INDEX 函数将字符串按逗号分隔成多个子串。例如,将上面得到的字符串按逗号分隔成三个子串,可以使用以下语句:
SELECT SUBSTRING_INDEX(values, ',', 1) AS id, SUBSTRING_INDEX(SUBSTRING_INDEX(values, ',', 2), ',', -1) AS name, SUBSTRING_INDEX(values, ',', -1) AS age FROM (SELECT CONCAT(GROUP_CONCAT(id SEPARATOR ','), ',', GROUP_CONCAT(name SEPARATOR ','), ',', GROUP_CONCAT(age SEPARATOR ',')) AS values FROM table_name) AS t; -
将得到的子串按列排列。例如,将上面得到的三个子串按 id、name、age 排列,可以使用以下语句:
SELECT id, name, age FROM (SELECT SUBSTRING_INDEX(values, ',', 1) AS id, SUBSTRING_INDEX(SUBSTRING_INDEX(values, ',', 2), ',', -1) AS name, SUBSTRING_INDEX(values, ',', -1) AS age FROM (SELECT CONCAT(GROUP_CONCAT(id SEPARATOR ','), ',', GROUP_CONCAT(name SEPARATOR ','), ',', GROUP_CONCAT(age SEPARATOR ',')) AS values FROM table_name) AS t) AS t2;
这样就可以得到一个纵向展示的结果集,如下所示:
| id | name | age | |----|------|-----| | 1 | Tom | 20 | | 2 | Jack | 25 | | 3 | Lucy | 30 |
-
通过上述步骤,就可以将 MySQL 查询到的结果集从横向展示转换为纵向展示。
原文地址: https://www.cveoy.top/t/topic/oJYS 著作权归作者所有。请勿转载和采集!