SQL 行值轮转

下面将详细讲解SQL行值轮转的攻略。

什么是SQL行值轮转?

SQL行值轮转(Row Value Transposition),也称为行转列、透视表,是将原始数据行转换为新的数据列的一个过程。通常情况下,我们从数据库中获取的数据是以行的形式呈现的,如果要将这些行数据“横向”展示,可以使用SQL行值轮转。

SQL行值轮转的语法

SQL行值轮转有不同的语法,此处介绍两种常见的语法:

  1. 使用MAX()和CASE WHEN
SELECT
  SUM(CASE WHEN `属性列` = '属性值1' THEN `值列` END) AS `新列名1`,
  SUM(CASE WHEN `属性列` = '属性值2' THEN `值列` END) AS `新列名2`,
  ...
FROM `表名`
GROUP BY `某列`
  1. 使用PIVOT
SELECT *
FROM `表名`
PIVOT(
  SUM(`值列`) -- 聚合函数,可选择AVG、MAX、MIN等
  FOR `属性列` IN (`属性值1`, `属性值2`, ...)
)

SQL行值轮转的实例

首先,我们创建一个示例表products,包含idnameversionprice四个字段。

CREATE TABLE `products` (
  `id` INT(11) NOT NULL,
  `name` VARCHAR(255) NOT NULL,
  `version` VARCHAR(255) NOT NULL,
  `price` DECIMAL(10, 2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

插入一些示例数据:

INSERT INTO `products` (`id`, `name`, `version`, `price`)
VALUES (1, 'iphone', '12', 7999.00),
    (2, 'iphone', '11', 5999.00),
    (3, 'ipad', 'air', 5999.00),
    (4, 'ipad', 'pro', 7999.00);

示例1:使用MAX()和CASE WHEN

要将products表按照name列进行行值转列,将version列的值作为新列名,对应的price列的值作为新列的值。

SELECT
  MAX(CASE WHEN `version`='12' THEN `price` END) AS `iphone12`,
  MAX(CASE WHEN `version`='11' THEN `price` END) AS `iphone11`,
  MAX(CASE WHEN `version`='air' THEN `price` END) AS `ipadAir`,
  MAX(CASE WHEN `version`='pro' THEN `price` END) AS `ipadPro`
FROM `products`
GROUP BY `name`;

解释如下:

  1. MAX()函数会返回指定条件下的最大值,此处只是方便聚合,不影响结果。
  2. CASE WHEN语句把version列的值作为条件,当条件成立时,返回price列的值,否则返回NULL(如果没有ELSE语句)。
  3. AS关键字可以指定新列的列名。
  4. GROUP BY语句指定对name列进行聚合。

结果如下:

iphone12 iphone11 ipadAir ipadPro
7999.00 5999.00 5999.00 7999.00

示例2:使用PIVOT

使用相同的数据和条件进行下一步示例,使用PIVOT语句将行值转列。

SELECT *
FROM (
  SELECT `name`, `version`, `price`
  FROM `products`
) AS `t`
PIVOT (
  MAX(`price`)
  FOR `version` IN (`12`, `11`, `air`, `pro`)
) AS `p`

解释如下:

  1. 内部查询语句查询出满足条件的nameversionprice列。
  2. PIVOT语句指定对version列进行转置,使用MAX()函数对price列进行聚合。
  3. IN语句指定了所有可能的属性值,对于实际情况,需要根据数据进行调整。

结果如下:

name 12 11 air pro
ipad NULL NULL 5999.00 7999.00
iphone 7999.00 5999.00 NULL NULL

通过以上两个实例,我们可以看到SQL行值轮转的两种语法,同时也掌握了如何将行转列,以及如何使用聚合函数和透视表对数据进行汇总。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 行值轮转 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • SQL Server字符串切割函数

    下面是关于SQL Server字符串切割函数的完整攻略。 什么是SQL Server字符串切割函数 SQL Server字符串切割函数指的是用于将一个字符串拆分成多个子字符串的函数。 SQL Server字符串切割函数的类型 SQL Server字符串切割函数有以下两种类型: 内置字符串切割函数:包括SUBSTRING函数和CHARINDEX函数。SUBST…

    database 2023年5月21日
    00
  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    接下来我将为您详细讲解在Ubuntu15下mysql5.6.25不支持中文的解决办法。 确认问题 在开始解决问题之前,我们首先需要确认中文不支持的问题确实存在。最常见的表现就是中文的字符集显示出现乱码。这时候我们可以通过以下命令来检查当前mysql的字符集配置是否正确: mysql> show variables like ‘%character%’;…

    database 2023年5月22日
    00
  • MySQL导致索引失效的几种情况

    MySQL导致索引失效的几种情况 在使用MySQL数据库时,我们经常需要利用索引提高查询效率,但是有时候我们发现索引并没有起到预期的作用,这可能是索引被失效了,下面列举了几种常见的MySQL导致索引失效的情况: 对索引列进行函数操作 如果查询条件中对索引列进行了函数操作,那么MySQL就无法使用这个索引了。 例如下面的查询语句: SELECT * FROM …

    database 2023年5月22日
    00
  • Centos6.7 Redis3.2.8的主从搭建

    首先参看一下redis 3.2.8的安装 传送门:biubiubiu 飞去吧:http://www.cnblogs.com/bing-yu12/p/6582086.html 我的主从搭建:   redis 主环境:     centos 6.7      ip:192.168.184.3     redis 3.2.8     redis.conf的重要配置…

    Redis 2023年4月13日
    00
  • extundelete实现Linux下文件 文件夹数据恢复教程

    下面是“extundelete实现Linux下文件 文件夹数据恢复教程”的完整攻略。 一、准备工作 在使用extundelete前,需要做一些准备工作。 1.备份 在恢复文件或文件夹之前,务必备份磁盘上的数据,以免造成更大的损失。 2.停止写入 在文件或文件夹丢失后,为了避免数据被覆盖,需要尽快停止对磁盘的写入操作。 3.安装extundelete 在Ubu…

    database 2023年5月22日
    00
  • 新手必须知的Node.js 4个JavaScript基本概念

    我来为您讲解“新手必须知的Node.js 4个JavaScript基本概念”的攻略。 1. JavaScript中变量声明及数据类型 在JavaScript中,声明变量需要用到var关键字,变量名可以包含字母、数字、下划线等,但不能以数字开头。例如: var name = "Tom"; var age = 20; 在JavaScript中…

    database 2023年5月21日
    00
  • Mysql数据库之sql基本语句小结

    Mysql数据库之SQL基本语句小结 Mysql是一种常用的关系型数据库,使用SQL语句进行管理和操作。在这篇文章中,我们将介绍Mysql数据库中的基本SQL语句并给出示例说明。 SQL语句的分类 在Mysql中,SQL语句主要可以分为以下几类: 数据库操作语句,包括创建、删除和选择数据库等。 数据表操作语句,包括创建、删除和修改表结构等。 数据操作语句,包…

    database 2023年5月22日
    00
  • docker安装redis5.0.3的方法步骤

    下面是docker安装redis5.0.3的方法步骤的详细攻略。 准备工作 在开始之前,需要先安装好Docker。如果您还没有安装,则需要先根据操作系统的不同,下载并安装Docker。具体安装方法可以参考Docker的官方文档(https://docs.docker.com/get-docker/)。 下载并启动Redis容器 打开终端,输入以下命令拉取Re…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部