当前位置: 首页 > article >正文

SQL笔记#SQL高级处理

一、窗口函数

1、什么是窗口函数

        窗口函数也称为OLAP函数。OLAP的意思是对数据库数据进行实时分析处理。

2、窗口函数的语法

<窗口函数> OVER ( [PARTITION BY <列清单>]

                                                 ORDER BY <排列用列清单> )

\blacksquare 能够作为窗口函数使用的函数

\boldsymbol{}1、聚合函数(SUM、AVG、COUNT、MAX、MIN)

2、RANK、DENSE_RANK、ROW_NUMBER等专用窗口函数 

3、语法的基本使用方法——使用RANK函数

-- 根据不同的商品种类,按照销售单价从低到高的顺序排序
SELECT product_name, product_type, sale_price,
       RANK () OVER (PARTITION BY product_type
                         ORDER BY sale_price) AS ranking
  FROM Product;
 product_name | product_type | sale_price | ranking
--------------+--------------+------------+---------
 圆珠笔       | 办公用品     |        100 |       1
 打孔器       | 办公用品     |        500 |       2
 叉子         | 厨房用具     |        500 |       1
 擦菜板       | 厨房用具     |        880 |       2
 菜刀         | 厨房用具     |       3000 |       3
 高压锅       | 厨房用具     |       6800 |       4
 T恤衫        | 衣服         |       1000 |       1
 运动T恤      | 衣服         |       4000 |       2

         RANK() OVER (...):这是一个窗口函数,用于在由 PARTITION BY 和 ORDER BY 定义的窗口内为每一行分配一个排名。

   PARTITION BY 子句用于将数据分为不同的组。在每个组内,RANK() 函数将独立地进行排名。

   ORDER BY 子句用于指定窗口内行的排序方式。可以通过关键字ASC/DESC来指定升序和降序,省略该关键字时会默认按照ASC,也就是升序进行排序。

SELECT product_name,product_type,sale_price,
        RANK () OVER (PARTITION BY product_type
                        ORDER BY sale_price DESC) AS ranking
    FROM Product;

4、无需指定PARTITION BY

-- 不指定PARTITION BY
SELECT product_name, product_type, sale_price, 
       RANK () OVER (ORDER BY sale_price) AS ranking
  FROM Product;
 product_name | product_type | sale_price | ranking
--------------+--------------+------------+---------
 圆珠笔       | 办公用品     |        100 |       1
 打孔器       | 办公用品     |        500 |       2
 叉子         | 厨房用具     |        500 |       2
 擦菜板       | 厨房用具     |        880 |       4
 T恤衫        | 衣服         |       1000 |       5
 菜刀         | 厨房用具     |       3000 |       6
 运动T恤      | 衣服         |       4000 |       7
 高压锅       | 厨房用具     |       6800 |       8

5、专用窗口函数的种类

\bullet RANK函数           

        存在相同位次的记录会跳过之后的位次。例如,有3条记录排在第一位时:1,1,1,4……

\bullet DENSE_RANK函数

        存在相同谓词的记录不会跳过之后的位次。例如,有3条记录排在第一位时:1,1,1,2……


http://www.kler.cn/a/564351.html

相关文章:

  • cve-2025-25064漏洞分析
  • 记录一次bug,xgplayer西瓜视频播放切进度条视频加载失败
  • 服务异步通讯与RabbitMQ
  • Java+Vue+Spring的蛋糕甜品商城(程序+论文+讲解+安装+调试+售后)
  • 如何使用Python编程实现捕获笔记本电脑麦克风的音频并通过蓝牙耳机实时传输
  • k8s新增Node节点 简单易上手 如何给k8s新添加node节点
  • 科技快讯 | DeepSeek宣布开源DeepGEMM;多个团队开发AI论文反识别技术;OpenAI GPT 4.5现身Android测试版,即将发布
  • 深度学习-135-LangGraph之应用实例(四)构建RAG问答系统同时对文档进行元数据增强
  • C++ 常见面试知识点
  • 【第九节】C++设计模式(结构型模式)-Composite(组合)模式
  • 细说 Java GC 垃圾收集器
  • TDengine 中的数据库
  • VSCode+PlatformIO报错 找不到头文件
  • 2024 年 6 月青少年软编等考 C 语言四级真题解析
  • Kafka消费者相关
  • HAL库 IIC写和读函数
  • 神经网络 - 激活函数(ReLU 函数 - 基本概念)
  • 2025年前端高频面试题(含答案)
  • MOBA:长上下文 LLMs 的混合块注意机制
  • RabbitMQ系列(一)架构解析