MySQL 查询到的结果集默认是横向展示的,每一行表示一个记录,每一列表示一个字段。如果需要将结果集纵向展示,可以通过 MySQL 的转置函数实现。具体方法如下:

假设查询的结果集如下:

| id | name | age | |----|------|-----| | 1 | Tom | 20 | | 2 | Jack | 25 | | 3 | Lucy | 30 |

要将结果集纵向展示,可以使用 MySQL 的 GROUP_CONCAT 函数和 CONCAT 函数配合使用,具体步骤如下:

  1. 使用 GROUP_CONCAT 函数将所有记录的字段值拼接成一个字符串。例如,将 id 列的所有值拼接成一个字符串,可以使用以下语句:

    SELECT GROUP_CONCAT(id SEPARATOR ',') AS ids FROM table_name;
    

    这样就可以得到一个包含所有 id 值的字符串,例如:'1,2,3'。

  2. 将所有需要展示的字段的值拼接成一个字符串。例如,将所有记录的 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'。

  3. 对得到的字符串进行转置操作。可以使用 MySQL 的 SUBSTRING_INDEX 函数将字符串拆分成多个子串,然后再将这些子串按列排列。具体步骤如下:

    1. 使用 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;
      
    2. 将得到的子串按列排列。例如,将上面得到的三个子串按 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 查询到的结果集从横向展示转换为纵向展示。

MySQL 结果集纵向展示:使用 GROUP_CONCAT 和 SUBSTRING_INDEX 实现

原文地址: https://www.cveoy.top/t/topic/oJYS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录