iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >与SQL窗口函数相同
  • 886
分享到

与SQL窗口函数相同

2024-04-02 19:04:59 886人浏览 独家记忆
摘要

窗口函数的目的是以声明的方式将业务报告需求转换为sql,从而使查询性能和开发人员/业务分析师的效率得到显着提高。 我看到现实世界的报告和仪表板在使用窗口功能后从几小时到几分钟,几分钟到几秒钟。

窗口函数的目的是以声明的方式将业务报告需求转换为sql,从而使查询性能和开发人员/业务分析师的效率得到显着提高。 我看到现实世界的报告和仪表板在使用窗口功能后从几小时到几分钟,几分钟到几秒钟。 查询大小从40页减少到几页。 早在上世纪90年代,Redbrick数据库就真正理解了业务用例并创建了一个新的功能层来进行业务报告,包括排名,运行总计,根据子组,位置等计算佣金和库存。这些都是在SQL标准中每个BI层(如Tableau,Looker,Cognos)都利用此功能。

窗口函数简介

想象一下,通过两轮比赛你有六个高尔夫球手。 现在,您需要创建排行榜并对其进行排名。 使用SQL对它们进行排名

播放机 第1轮 Round2
马尔科 75 73
约翰 72 68
67 76
74 71
Sitaram 68 72
冰洁 71 67

将数据插入CoucHBase


INSERT  INTO高尔夫

VALUES(“KP1”,{ “player”:“Marco”,“round1”:75,“round2”:73}),

VALUES(“KP2”,{ “player”:“Johan”,“round1”:72,“round2”:68}),

VALUES(“KP3”,{ “player”:“Chang”,“round1”:67,“round2”:76}),

VALUES(“KP4”,{ “player”:“Isha”,“round1”:74,“round2”:71}),

VALUES(“KP5”,{ “player”:“Sitaram”,“round1”:68,“round2”:72}),

VALUES(“KP6”,{ “玩家”:“冰洁”,“ROUND1”:71,“round2”:67});

没有窗口功能(当前状态 - Couchbase 6.0)

要在不使用窗口函数的情况下编写查询,您需要一个子查询来计算每个玩家的等级。 该子查询必须扫描所有数据,导致 O(N ^ 2) 的最差算法复杂度 这大大增加了执行时间和吞吐量。


用g1 作为(选择球员,第1轮,第2轮从高尔夫球场)

SELECT     g3 .player                                 AS player,

          (g3 .round 1 + g3 .round 2)                     AS T,

          ((g3 .round 1 + g3 .round 2) - 144)             AS ToPar,

          (选择原始1 + COUNT(*)

             从 g1 作为 g2

               其中(g2 .round 1 + g2 .round 2)<

                     (g3 .round 1 + g3 .round 2))[ 0 ]    AS sqlrankR2

从 g1 到 g3

ORDER  BY sqlrankR2



结果:

T ToPar播放器sqlrankR2

138 - 6  “冰洁”     1

140 - 4  “约翰”       2

140 - 4  “Sitaram”     2

143 - 1  “Chang”       4

145  1  “Isha”         5

148  4  “Marco”        6

使用Mad-Hatter中的窗口函数(即将发布)

此查询返回玩家,两轮后的总数(T),分数如何超过/低于标准(ToPar),然后 根据前两轮的分数对它们 进行 排名 。 这是Mad-Hatter的新功能。 其时间复杂度为O(N),意味着执行时间只会线性增加。


SELECT     播放器                                 AS播放器,

          (round1 + round2)                        AS T,

          ((round1 + round2) - 144)                AS ToPar,

          RANK()OVER(ORDER  BY(round1 + round2))AS rankR2

来自高尔夫;





T ToPar玩家等级R2

138 - 6  “冰洁”     1

140 - 4  “约翰”       2

140 - 4  “Sitaram”     2

143 - 1  “Chang”       4

145  1   “Isha”        5

148  4   “Marco”       6

观察:

  1. 查询简单明了地表达了要求。

  2. 在真实场景中执行此查询的效果要好得多。 我们计划衡量。

  3. 当排名要求依赖于多个文档时,查询变得非常复杂 - 编写,优化和运行。

  4. 所有这些都会影响总体TCO。

现在,让我们创建一个扩展的仪表板。

显示添加密集排名,行号,领先者以及领导者背后的笔画数。 报告中的所有非常常见的事情。 只要看到OVER()子句,就会看到新的窗口函数。 下面的查询有六个窗口函数。


SELECT     播放器                                 AS播放器,

          (round1 + round2)                        AS T,

          ((round1 + round2) - 144)                AS ToPar,

          RANK()OVER(ORDER  BY(round1 + round2))AS rankR2,

          DENSE_RANK()OVER(ORDER  BY(round1 + round2))AS rankR2Dense,

          ROW_NUMBER()OVER()rownum,

          ((round1 + round2) -

              FIRST_VALUE(ROUND1 + round2)

                OVER(ORDER  BY(round1 + round2)))AS strokebehind,

          RANK()OVER(ORDER  BY(round1))         AS rankR1,

          LAG(播放器,1,“无”)OVER(ORDER  BY ROUND1 + round2)

                                                AS inFront

从高尔夫球场

ORDER  BY rankR2





T ToPar inFront player rankR1 rankR2 rankR2Dense rownum stroke behind behind

138 - 6  “无”     “冰洁”   3      1       1       3       0

140 - 4  “Johan”    “Sitaram”   2      2       2       2       2

140 - 4  “冰洁”  “约翰”     4      2       2       4       2

143 - 1  “Sitaram”  “Chang”     1      4       3       1       5

145  1  “Chang”   “Isha”        5      5       4       5       7

148  4  “Isha”    “Marco”       6      6       5       6      10

正如您之前看到的, 使用 子查询方法 使用六个窗口函数 执行此查询 将是一个更大的努力,昂贵,容易出错的查询。

除了将内置聚合(COUNT,SUM,AVG等)作为窗口函数,即将发布的版本将具有以下窗口函数。 它们中的每一个的语法和语义在标准中得到很好的定义,并在下面的参考部分的文章中进行了充分描述。

RANK()
DENSE_RANK()
PERCENT_RANK()
CUME_DIST()
NTILE()
RATio_TO_REPORT()
ROW_NUMBER()
LAG()
FIRST_VALUE()
LAST_VALUE()
NTH_VALUE()
LEAD()


您可能感兴趣的文档:

--结束END--

本文标题: 与SQL窗口函数相同

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

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

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

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

下载Word文档
猜你喜欢
  • 与SQL窗口函数相同
    窗口函数的目的是以声明的方式将业务报告需求转换为SQL,从而使查询性能和开发人员/业务分析师的效率得到显着提高。 我看到现实世界的报告和仪表板在使用窗口功能后从几小时到几分钟,几分钟到几秒钟。 ...
    99+
    2024-04-02
  • SQL窗口函数之排名窗口函数的使用
    目录案例分析案例使用的示例表1.环比分析2.同比分析3.复合增长率4.不同产品最高和最低销售额示例表和脚本关于窗口函数的基础,请看文章SQL窗口函数 取值窗口函数可以用于返回窗口内指...
    99+
    2024-04-02
  • SQL窗口函数之取值窗口函数的使用
    目录案例分析1.环比分析2.同比分析3.复合增长率4.不同产品最高和最低销售额示例表和脚本关于窗口函数的基础,请看文章SQL窗口函数 取值窗口函数可以用于返回窗口内指定位置的数据行。...
    99+
    2024-04-02
  • SQL窗口函数之排名窗口函数怎么使用
    这篇文章主要介绍“SQL窗口函数之排名窗口函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL窗口函数之排名窗口函数怎么使用”文章能帮助大家解决问题。取...
    99+
    2024-04-02
  • 什么是SQL窗口函数
    本篇内容主要讲解“什么是SQL窗口函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是SQL窗口函数”吧!窗口函数(Window Function) 是 SQL2003 标准中定义的一项新特...
    99+
    2023-06-15
  • SQL窗口函数是什么
    这篇文章主要介绍了SQL窗口函数是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。窗口函数形如:表达式 OVER (PARTITION BY 分组字段 ORDER BY 排...
    99+
    2023-06-29
  • SQL窗口函数怎么使用
    本文小编为大家详细介绍“SQL窗口函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL窗口函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是窗口函数S...
    99+
    2024-04-02
  • SQL窗口函数之聚合窗口函数的使用(count,max,min,sum)
    目录案例分析1.移动平均值2.累计求和(ROW)3.累计求和(RANGE)示例表和脚本关于窗口函数的基础,请看文章SQL窗口函数 许多常见的聚合函数也可以作为窗口函数使用,包括AVG...
    99+
    2024-04-02
  • SQL窗口函数的使用方法
    目录什么是窗口函数窗口函数组成部分1.创建数据分区2.分区内的排序3.指定窗口大小窗口函数分类1.聚合窗口函数2.排名窗口函数3.取值窗口函数什么是窗口函数 SQL窗口函数为在线分析...
    99+
    2024-04-02
  • sql 窗口函数ROW_NUMBER() 分组/排序/计数
    ROW_NUMBER() 窗口函数 / 分析函数 MySQL中,row_number() 函数 用来分区的,使用它 为返回的结果集中的每一行 生成一个序列号(为行分配序号),第一个数字以1开头。 主要用来计数的,也便于用此函数针对全部字段进...
    99+
    2023-08-20
    sql 数据库 mysql
  • 带你快速了解SQL窗口函数
    目录底表分组排序各分组排序函数的差异累计聚合与 GROUP BY 组合使用总结窗口函数形如: 表达式 OVER (PARTITION BY 分组字段 ORDER BY 排序字段) 有...
    99+
    2024-04-02
  • Spark SQL中的窗口函数是什么
    在Spark SQL中,窗口函数是一种特殊的函数,可以用来在特定的窗口或分区中计算结果。窗口函数通常用于处理类似排名、聚合、排序等需...
    99+
    2024-04-09
    Spark
  • 如何快速了解SQL窗口函数
    这篇文章主要介绍“如何快速了解SQL窗口函数”,在日常操作中,相信很多人在如何快速了解SQL窗口函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何快速了解SQL窗口函数”...
    99+
    2024-04-02
  • Mysql 窗口函数
    一, MySQl 8.0 窗口函数 窗口函数适用场景: 对分组统计结果中的每一条记录进行计算的场景下, 使用窗口函数更好, 注意, 是每一条!! 因为MySQL的普通聚合函数的结果(如 group...
    99+
    2023-09-17
    scala spark java
  • MYSQL窗口函数(Rows & Range)——滑动窗口函数用法
    语法介绍 窗口函数语法: over (partition by order by rows/range子句 ) 可以放以下两种函数: 1) 专用窗口函数,包括后面要讲到的rank, den...
    99+
    2023-09-03
    mysql 数据库
  • SQL中常用的窗口函数(排序函数)-row_number/rank/dense_rank/ntile
    总结四个函数的特点: row_number():连续不重复;1234567 rank() :重复不连续;1222567 dense_rank():重复且连续;1222345 ntile():平均分组;...
    99+
    2023-09-05
    mysql 数据库 大数据
  • Hive窗口函数回顾
    1.语法 1.1 基于行的窗口函数 Hive的窗口函数分为两种类型,一种是基于行的窗口函数,即将某个字段的多行限定为一个范围,对范围内的字段值进行计算,最后将形成的字段拼接在该表上。 注意:在...
    99+
    2023-10-12
    hive hadoop 数据仓库
  • MySQL窗口函数 PARTITION BY()函数介绍
    前期数据准备 # 创建数据库create database if not exists shopping charset utf8;# 选择数据库use shopping;# 创建产品表create ...
    99+
    2023-09-12
    mysql sql 数据库
  • mysql窗口函数有哪些
    本篇文章为大家展示了mysql窗口函数有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、说明可以用来实现一些新的查询方式。窗口函数像SUM()、COUNT()这样的集合函数,但不是将多行查询结...
    99+
    2023-06-15
  • MySQL窗口函数(MySQL Window Functions)
           MySQL从8.0开始支持窗口函数(Window Functions),因其经常被用在数据分析的场景,窗口函数也被称为分析函数(Analytic Functions)。 目录 一、窗口函数概念 二、基础语法 ...
    99+
    2023-09-01
    数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作