iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 中行列转换的SQL技巧有哪些
  • 179
分享到

MySQL 中行列转换的SQL技巧有哪些

2024-04-02 19:04:59 179人浏览 八月长安
摘要

这篇文章给大家分享的是有关Mysql 中行列转换的sql技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列转换常见场景 由于很多业务表因为历史原因或者性能原因,都使用

这篇文章给大家分享的是有关Mysql 中行列转换的sql技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

行列转换常见场景

由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式。即同一个列中存储了多个属性值(具体结构见下表)。 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。

表数据:

ID

Value

1

tiny,small,big

2

small,medium

3

tiny,big

期望得到结果:

ID

Value

1

tiny

1

small

1

big

2

small

2

medium

3

tiny

3

big


具体方法

先从一个具体实例开始我们的介绍:

#准备示例数据

create table tbl_name (ID int ,mSize varchar(100));

insert into tbl_name values (1,'tiny,small,big');

insert into tbl_name values (2,'small,medium');

insert into tbl_name values (3,'tiny,big');

#用于行列转换循环的自增表

create table incre_table (AutoIncreID int);

insert into incre_table values (1);

insert into incre_table values (2);

insert into incre_table values (3);

#实现行列转换的SQL

select a.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1)

from

tbl_name a

join

incre_table b

on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1)

order by a.ID;

原理分析: 这个join最基本原理是笛卡尔积。通过这个方式来实现循环。 以下是具体问题分析:length(a.Size) - length(replace(a.mSize,',',''))+1 表示了,按照逗号分割后,改列拥有的数值数量,下面简称n join过程的伪代码:

根据ID进行循环

{

    判断:i 是否 <= n

    {

        获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.mSize,',',b.ID),',',-1)

        i = i +1

    }

    ID = ID +1

}


改进版本

上面一种方法方法的缺点在于,我们需要一个拥有连续数列的独立表(也就是上文中的incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。 例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。 当然,mysql内部也有现成的连续数列表可用。如mysql.help_topic, help_topic_id 共有504个数值,一般能满足于大部分需求了。

改写后如下:

select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1)

from

tbl_name a

join

mysql.help_topic b

on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1)

order by a.ID;

感谢各位的阅读!关于“MySQL 中行列转换的SQL技巧有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 中行列转换的SQL技巧有哪些

本文链接: https://www.lsjlt.com/news/63369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 中行列转换的SQL技巧有哪些
    这篇文章给大家分享的是有关MySQL 中行列转换的SQL技巧有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。行列转换常见场景 由于很多业务表因为历史原因或者性能原因,都使用...
    99+
    2024-04-02
  • 进行C++转换技巧有哪些
    今天就跟大家聊聊有关进行C++转换技巧有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。由UML向C++ 转换而生成的C++ 代码的一些相关技巧,您可以根据需要选择自己想要的信息,...
    99+
    2023-06-17
  • mysql sql优化的技巧有哪些
    以下是一些MySQL SQL优化的常见技巧: 使用索引:为频繁使用的列创建索引,以提高查询性能。可以使用EXPLAIN语句来分析查...
    99+
    2024-04-09
    mysql
  • sql将行转列的方法有哪些
    在SQL中,可以使用以下方法将行转列:1. 使用CASE语句:- 使用多个CASE语句,每个语句对应一个要转置的列,并使用不同的条件...
    99+
    2023-10-12
    sql
  • mysql行转列的方法有哪些
    在MySQL中,可以使用以下方法将行转列: 使用CASE语句:使用多个CASE语句将多行数据转换为单行。每个CASE语句对应一个列...
    99+
    2024-04-09
    mysql
  • mysql中的行列转换方法
    这篇文章主要介绍“mysql中的行列转换方法”,在日常操作中,相信很多人在mysql中的行列转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的行列转换方法”...
    99+
    2024-04-02
  • 如何进行SQL中PIVOT行列转换
    这篇文章主要讲解了“如何进行SQL中PIVOT行列转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何进行SQL中PIVOT行列转换”吧!PIVOT通过将...
    99+
    2024-04-02
  • SQL优化技巧有哪些
    这篇文章主要讲解了“SQL优化技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL优化技巧有哪些”吧!一、索引优化索引的数据结构是 B+Tree,...
    99+
    2024-04-02
  • MySQL中的使用技巧有哪些
    这篇文章主要介绍“MySQL中的使用技巧有哪些”,在日常操作中,相信很多人在MySQL中的使用技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL中的使用技巧有...
    99+
    2024-04-02
  • C++转Python的技巧有哪些
    本篇内容主要讲解“C++转Python的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++转Python的技巧有哪些”吧!C++是跳水,Python 是潜水C++给人的感觉就像是一头...
    99+
    2023-06-15
  • php中布尔类型转换的规则和技巧有哪些
    这篇“php中布尔类型转换的规则和技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中布尔类型转换的规则和技巧有...
    99+
    2023-07-05
  • mysql行转列的实现方式有哪些
    MySQL行转列的实现方式有以下几种: 使用CASE语句:通过使用CASE语句可以根据条件将行数据转换为列数据。 SELEC&#...
    99+
    2024-04-09
    mysql
  • MyBatis的SQL优化技巧有哪些
    使用索引:在数据库表中创建索引可以大大提高查询性能。在编写SQL语句时,尽量使用索引列作为查询条件。 避免使用通配符查询:尽...
    99+
    2024-05-08
    MyBatis SQL
  • oracle sql优化的技巧有哪些
    以下是一些Oracle SQL优化的技巧: 使用索引:确保在常用的查询列上创建索引,以加快查询速度。可以使用EXPLAIN PLA...
    99+
    2024-04-09
    oracle
  • mysql小技巧有哪些
    这篇文章主要介绍mysql小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1.  查看历史操作记录 1.1   linux操作系统查看历...
    99+
    2024-04-02
  • 【SQL应知应会】行列转换(二)• MySQL版
    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 行列转换 • Mys...
    99+
    2023-08-25
    mysql adb 数据库 大数据 oracle 数据分析
  • 有哪些SQL查询小技巧
    本篇内容介绍了“有哪些SQL查询小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1、行列转...
    99+
    2024-04-02
  • SQL优化技巧有哪些呢
    这期内容当中小编将会给大家带来有关SQL优化技巧有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 数据库SQL优化大总结之 百万级数据库...
    99+
    2024-04-02
  • MS SQL使用技巧有哪些
    这篇文章主要介绍MS SQL使用技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!判断某个表中是否存在某列if exists (select * from sysco...
    99+
    2024-04-02
  • Ruby语言中的SQL拼接技巧有哪些
    在 Ruby 中拼接 SQL 查询语句通常使用字符串插值或字符串连接的方式。以下是一些常用的 SQL 拼接技巧: 使用字符串插值:...
    99+
    2024-04-29
    SQL Ruby
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作