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

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……

相关文章:

  • 软件工程复试专业课-测试
  • Eclipse 编译项目指南
  • 基础设施安全(Infrastructure Security)是什么?
  • CMU15445(2024fall) Project #1 - Buffer Pool Manager踩坑大全
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(9)
  • 小红的字母游戏(A组)
  • python-leetcode-分割等和子集
  • IP-----动态路由OSPF
  • 火狐浏览器多开指南:独立窗口独立IP教程
  • 25西医研究生复试面试问题汇总 西医专业知识问题很全! 西医试全流程攻略 西医考研复试调剂真题汇总
  • 《从零到全栈:Vue2入门宝典》
  • olmOCR:使用VLM解析PDF
  • 【人工智能】数据挖掘与应用题库(201-300)
  • 「慢思考」机理分析:从雪球误差到正确推理概率
  • 12字符函数
  • ThreadLocal原理详解以及使用。
  • C++ 中的reduce函数使用指南
  • AI数据分析:用DeepSeek做数据清洗
  • Ubuntu系统上部署Node.js项目的完整流程
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 5
  • 中国-拉共体论坛第四届部长级会议北京宣言
  • 老人将房产遗赠给外孙,三个女儿却认为遗嘱应无效,法院判了
  • 商务部新闻发言人就中美日内瓦经贸会谈联合声明发表谈话
  • 全国层面首次!《防震减灾基本知识与技能大纲》发布
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人
  • 5年建成强化城市核心功能新引擎,上海北外滩“风景文化都是顶流”