我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在doris中实现行转列操作的三种方式及列转行的实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在doris中实现行转列操作的三种方式及列转行的实现

本文演示使用sql进行列转行的操作和列转行

一、行转列

创建表

drop table score_1;CREATE TABLE IF NOT EXISTS score_1(    `user_id` BIGINT NOT NULL COMMENT "user_id",    `subject` VARCHAR(255) NOT NULL COMMENT "学科",    `score` BIGINT  NOT NULL DEFAULT '0' COMMENT "分数")DUPLICATE KEY(`user_id`,`subject`,`score`)DISTRIBUTED BY HASH(`user_id`) BUCKETS 1PROPERTIES ("replication_allocation" = "tag.location.default: 1");desc  score_1;



 插入数据

 insert  into `score_1`(`user_id`,`subject`,`score`) values (1,'MATH',90),(1,'ENGLISH',98),(1,'CHINESE',85),(2,'MATH',87),(2,'ENGLISH',78),(2,'CHINESE',89), (3,'MATH',90),(3,'ENGLISH',98),(3,'CHINESE',85),(4,'MATH',87),(4,'ENGLISH',78),(4,'CHINESE',89);

行转列的三种方式
1、union all

select user_id,SUM(MATH) AS 'MATH',SUM(ENGLISH) AS 'ENGLISH',SUM(CHINESE)AS CHINESE from ((SELECT user_id,score AS 'MATH',0 AS 'ENGLISH',0 AS 'CHINESE' FROM score_1 WHERE subject = 'MATH')UNION ALL(SELECT user_id,0 AS 'MATH',score AS 'ENGLISH',0 AS 'CHINESE' FROM score_1 WHERE subject = 'ENGLISH')UNION ALL(SELECT user_id,0 AS 'MATH',0 AS 'ENGLISH',score AS 'CHINESE' FROM score_1 WHERE subject = 'CHINESE')) tGROUP BY user_id


2、join

SELECT t1.user_id, t1.MATH, t2.score AS 'ENGLISH',t3.score AS 'CHINESE' FROM    ( SELECT user_id, score AS 'MATH' FROM score_1 WHERE subject = 'MATH' ) AS t1    JOIN ( SELECT user_id, score FROM score_1 WHERE subject = 'ENGLISH' ) AS t2 ON t1.user_id = t2.user_id    JOIN ( SELECT user_id, score FROM score_1 WHERE subject = 'CHINESE' ) AS t3 ON t1.user_id = t3.user_id


3、sum group

    SELECT user_id,        sum(if(subject='MATH', score, NULL)) as `MATH`,        sum(if(subject='ENGLISH', score, NULL)) as `ENGLISH`,       sum(if(subject='CHINESE', score, NULL)) as `CHINESE`FROM score_1 GROUP BY user_id

二、列转行

drop table score_2;CREATE TABLE IF NOT EXISTS score_2(    `user_id` BIGINT NOT NULL COMMENT "user_id",    `math_score` BIGINT NOT NULL COMMENT "数学分数",    `en_score` BIGINT NOT NULL COMMENT "英语分数",    `cn_score` BIGINT NOT NULL COMMENT "语文分数")UNIQUE KEY(`user_id`)DISTRIBUTED BY HASH(`user_id`) BUCKETS 1PROPERTIES ("replication_allocation" = "tag.location.default: 1");INSERT INTO score_2(user_id,cn_score,math_score,en_score) VALUES (1,90,92,80),(2,91,91,82),(3,97,81,86),(4,66,87,68),(5,86,89,78),(6,85,82,45);select * from score_2;select user_id,'语文' as subject,cn_score as score from score_2unionselect user_id,'英语' as subject,en_score as score from score_2union select user_id,'数学' as subject,math_score as score from score_2;

来源地址:https://blog.csdn.net/rjbcxhc/article/details/128854546

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在doris中实现行转列操作的三种方式及列转行的实现

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

下载Word文档

猜你喜欢

MySQL实现列转行与行转列的操作代码

目录引言列转行(Pivoting)示例数据转编程网换前查询结果列转行 SQL 语句转换后查询结果行转列(Unpivoting)示例数据转换前查询结果行转列 SQL 语句转换后查询结果引言在处理数据时,我们常常会遇到需要将表中的列(字段)转
MySQL实现列转行与行转列的操作代码
2024-09-25

Hive行转列的实现方式

本篇内容主要讲解“Hive行转列的实现方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hive行转列的实现方式”吧!前言传统关系型数据库中,无论是Oracle(11g之后)还是SQLserve
2023-06-19

mysql行转列的实现方式有哪些

MySQL行转列的实现方式有以下几种:使用CASE语句:通过使用CASE语句可以根据条件将行数据转换为列数据。SELECTid,MAX(CASE WHEN attribute = 'attribute1' THEN va
mysql行转列的实现方式有哪些
2024-04-09

sql实现列转行的方法是什么

在SQL中,可以使用UNPIVOT操作符来实现列转行的功能。UNPIVOT操作符可以将多个列转换为行,将多个列的值转换为行的值,并将这些值放在一个新的列中。UNPIVOT操作符通常与SELECT语句一起使用,可以使用它将列转换为行。例如,
sql实现列转行的方法是什么
2024-04-15

mysql实现行转列的方法是什么

在MySQL中,可以使用CASE语句来实现行转列操作。通过使用CASE语句,可以根据不同的条件将多行数据转换为单行数据。下面是一个示例:假设有一个名为students的表,包含以下数据:idnamesubject1AliceMat
mysql实现行转列的方法是什么
2024-05-23

MySQL中将一列以逗号分隔的值行转列的实现

前言有时会遇到没有遵守第一范式设计模式的业务表。即一列中存储了多个属性值。如下表pkvalue1ET,AT2AT,BT3AT,DT4DT,CT,AT一般有这两种常见需求(测试数据见文末)1.得到所有的不重复的值,如valueATBTCTDT
2022-05-21

Android编程实现在adapter中进行数据操作的方法

本文实例讲述了Android编程实现在adapter中进行数据操作的方法。分享给大家供大家参考,具体如下:package com.cvte.apkclassify; import java.util.ArrayList; import an
2022-06-06

在Java中,如何实现单例模式?有哪些实现方式?(请列举并解释Java中实现单例模式的几种常见方法。)

Java中单例模式确保一个类只有一个实例,用于控制资源访问、保持状态或提供全局访问点。实现方式包括:饿汉式:加载类时创建实例(线程安全,但浪费资源)。懒汉式:需要时创建实例(节省资源,但线程不安全,需同步)。双重检查锁定:优化懒汉式,使用volatile防止指令重排序(线程安全,性能较好)。枚举单例:利用枚举天生单例性和线程安全性。静态内部类:延迟加载,利用静态内部类确保单例性。
在Java中,如何实现单例模式?有哪些实现方式?(请列举并解释Java中实现单例模式的几种常见方法。)
2024-04-02

Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法

本文实例讲述了Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法。分享给大家供大家参考,具体如下:做Android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,
2023-05-31

在 golang 中,实现自定义类型的方法,因此不需要在 Println 中进行强制转换

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《在 golang 中,实现自定义类型的方法,因此不需要在 Println 中进行强制转换》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能
在 golang 中,实现自定义类型的方法,因此不需要在 Println 中进行强制转换
2024-04-04

编程热搜

目录