ORACLE-SQL-2

一、行转列

需求:根据uuid获取到一笔订单的全部打点位置和时间戳,按照打点位置来展示一笔订单的时间戳

原表:
在这里插入图片描述
转换后:

在这里插入图片描述

ID:自增长列
UUID:订单唯一id
PDACE:打点位置
TIMESTAMP:时间戳

SQL 建表源码

MAX(CASE WHEN Place=‘API_CODE’ THEN Timestamp ELSE ‘1’ END) API_CODE,
让【PDACE】列的某个值【 ‘API_CODE’】转成新列,【Timestamp】列作为行行值,【‘1’】最小值
【Uuid】多条数据的唯一值

SELECT Uuid,
        MAX(CASE WHEN Place='API_CODE' THEN Timestamp ELSE '1' END) API_CODE,
        MAX(CASE WHEN Place='API_DECODE' THEN Timestamp ELSE '1' END) API_DECODE,
        MAX(CASE WHEN Place='APP_CODE' THEN Timestamp ELSE '1' END) APP_CODE,
        MAX(CASE WHEN Place='APP_DECODE' THEN Timestamp ELSE '1' END) APP_DECODE,
        MAX(CASE WHEN Place='BUS_UP_CODE' THEN Timestamp ELSE '1' END) BUS_UP_CODE,
        MAX(CASE WHEN Place='BUS_UP_DECODE' THEN Timestamp ELSE '1' END) BUS_UP_DECODE,
        MAX(CASE WHEN Place='BUS_DOWN_CODE' THEN Timestamp ELSE '1' END) BUS_DOWN_CODE,
        MAX(CASE WHEN Place='BUS_DOWN_DECODE' THEN Timestamp ELSE '1' END) BUS_DOWN_CODE
        FROM performanceStatistics p 
GROUP BY Uuid 

二、统计
根据以上转成的新表数据,统计每个时间节点耗时的 平均值、最大值、最小值
在这里插入图片描述
一共3层SELECT自内而外
1、行转换后的新表
2、每个节点计算后设置新列名a b c d
3、计算新列的平均值、最大值、最小值

SELECT AVG(su.a) AS BUS_UP_avg, MAX(su.a) AS BUS_UP_max, MIN(su.a) AS BUS_UP_min,
              AVG(su.b) AS BUS_DOWN_avg, MAX(su.b) AS BUS_DOWN_max, MIN(su.b) AS BUS_DOWN_min,
              AVG(su.c) AS API_BUS_avg, MAX(su.c) AS API_BUS_max, MIN(su.c) AS API_BUS_min,
              AVG(su.d) AS BUS_APP_avg, MAX(su.d) AS BUS_APP_max, MIN(su.d) AS BUS_APP_min
FROM (
    	SELECT (ps.BUS_UP_CODE - ps.BUS_UP_DECODE) / 1000 AS a ,
		                (ps.BUS_DOWN_CODE - ps.BUS_DOWN_DECODE) / 1000 AS b,
                     (ps.BUS_UP_DECODE - ps.API_CODE) / 1000 AS c,
                      (ps.APP_DECODE - ps.BUS_UP_CODE) / 1000 AS d
                    	FROM (
                          SELECT Uuid,
                                  MAX(CASE WHEN Place='API_CODE' THEN Timestamp ELSE '1' END) API_CODE,
                                  MAX(CASE WHEN Place='API_DECODE' THEN Timestamp ELSE '1' END) API_DECODE,
                                  MAX(CASE WHEN Place='APP_CODE' THEN Timestamp ELSE '1' END) APP_CODE,
                                  MAX(CASE WHEN Place='APP_DECODE' THEN Timestamp ELSE '1' END) APP_DECODE,
                                  MAX(CASE WHEN Place='BUS_UP_CODE' THEN Timestamp ELSE '1' END) BUS_UP_CODE,
                                  MAX(CASE WHEN Place='BUS_UP_DECODE' THEN Timestamp ELSE '1' END) BUS_UP_DECODE,
                                  MAX(CASE WHEN Place='BUS_DOWN_CODE' THEN Timestamp ELSE '1' END) BUS_DOWN_CODE,
                                  MAX(CASE WHEN Place='BUS_DOWN_DECODE' THEN Timestamp ELSE '1' END) BUS_DOWN_DECODE
                                  FROM performanceStatistics
                          GROUP BY Uuid 
	) ps
) su
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值