MySQL将多行转换为列

MySQL将多行转换为列

在本文中,我们将介绍如何将MYSQL中的多行转换为列。当我们需要将多行数据展示为一行数据时,这个方法非常有用。通常,我们将一些列重复列如题目所述地多次出现,那么将其转换为列可以更好地呈现数据。

阅读更多:MySQL 教程

使用CASE WHEN语句

首先,我们来看看如何使用CASE WHEN语句将多行数据转换为列。

假设我们有以下表格:

id order amount
1 a 100
1 b 200
1 c 300
2 a 400
2 b 500
2 c 600

我们可以使用以下SQL语句将数据转换为列:

SELECT
  id,
  SUM(CASE WHEN `order` = 'a' THEN amount ELSE 0 END) AS a,
  SUM(CASE WHEN `order` = 'b' THEN amount ELSE 0 END) AS b,
  SUM(CASE WHEN `order` = 'c' THEN amount ELSE 0 END) AS c
FROM
  orders
GROUP BY id;

以上SQL语句将order列中的每个值转换为一个列。对于每个订单,如果它的order值与我们所选的值相同,则为金额累加器加上相应的金额。否则,累加器将保持原来的值。

运行以上SQL语句,得到以下结果:

id a b c
1 100 200 300
2 400 500 600

我们可以看到,每行的order值已被转换为一个单独的列。

使用GROUP_CONCAT函数

除了使用CASE WHEN语句之外,我们还可以使用GROUP_CONCAT函数来将多行数据转换为列。

假设我们有以下表格:

id name value
1 property 10
1 tax 20
1 fee 30
2 property 40
2 tax 50
2 fee 60

我们可以使用以下SQL语句将数据转换为列:

SELECT
  id,
  GROUP_CONCAT(
    CASE
      WHEN name = 'property' THEN value 
      ELSE NULL
    END
  ) AS property,
  GROUP_CONCAT(
    CASE
      WHEN name = 'tax' THEN value 
      ELSE NULL
    END
  ) AS tax,
  GROUP_CONCAT(
    CASE
      WHEN name = 'fee' THEN value 
      ELSE NULL
    END
  ) AS fee
FROM
  data
GROUP BY id;

以上SQL语句将name列中的每个值转换为一个列。对于每个项目,只有当它名称匹配时,才会将其值添加到相应的列中。

运行以上SQL语句,得到以下结果:

id property tax fee
1 10 20 30
2 40 50 60

我们可以看到,每行的name值已被转换为一个单独的列。

使用GROUP BY WITH ROLLUP

有时,我们需要将多行数据转换为列并显示总计。在这种情况下,可以使用GROUP BY WITH ROLLUP语句。

假设我们有以下表格:

region product sales
Asia Phone 100
Asia Laptop 200
Europe Phone 300
Europe Laptop 400

我们可以使用以下SQL语句将数据转换为列并显示总计:

SELECT
  IFNULL(region, 'Total') AS region,
  SUM(CASE WHEN product = 'Phone' THEN sales ELSE 0 END) AS phone_sales,
  SUM(CASE WHEN product = 'Laptop' THEN sales ELSE 0 END) AS laptop_sales,
  SUM(sales) AS total_sales
FROM
  sales
GROUP BY region WITH ROLLUP;

以上SQL语句将product列中的每个值转换为一个列,并在最后添加了一个总计列。使用GROUP BY WITH ROLLUP语句,我们可以轻松地计算总计。

运行以上SQL语句,得到以下结果:

region phone_sales laptop_sales total_sales
Asia 100 200 300
Europe 300 400 700
Total 400 600 1000

我们可以看到,每个地区和总计都已被转换为一个单独的列。

总结

在MYSQL中,将多行数据转换为列可以更好地呈现数据。使用CASE WHEN语句或GROUP_CONCAT函数,我们可以将每行中的每个值转换为一个单独的列。使用GROUP BY WITH ROLLUP语句,我们还可以计算总计。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程