ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数的使用

ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数的作用是指定COLUMN(列)进行分区,在分区内指定COLUMN(列)进行排序,其中PARTITION BY COLUMN 为分区函数。代码具体实现如下

不进行分区的排序方式
--对商品价格的升序排序


SELECT A.*,
ROW_NUMBER() OVERORDER BY PRICE ASC) AS ROW_FLG
FROM COMMODITY A
 

进分区的排序方式
--对商品进行分类,分类后按照商品价格升序排序


SELECT A.*,
ROW_NUMBER() OVER(PARTITION BY 【SORTCOL】 ORDER BY PRICE ASC) AS ROW_FLG
FROM COMMODITY A


ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN DESC)函数可以用于查询重复数据、去重复查询,删除重复数据

转载于:https://www.cnblogs.com/ShaYeBlog/p/10346541.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`ROW_NUMBER()` OVER() 和 `COLLECT` 是 SQL 中用于数据分组操作的不同函数,它们在处理查询结果的排序和汇总方面各有用途。 ### ROW_NUMBER() `ROW_NUMBER()` 是一个窗口函数,在对结果集进行排序的基础上给每行分配一个唯一数字序号。这通常在需要对分组后的数据进行顺序编号的情况下使用。它不依赖于任何聚合计算,只是简单地按照指定的排序规则为每一行分配序列号。 ```sql SELECT table_name, column_value, ROW_NUMBER() OVER (ORDER BY column_value DESC) as RowOrder FROM your_table; ``` 在这段示例中,`ROW_NUMBER()` 函数结合了 `ORDER BY` 子句按降序排序,为表 `your_table` 的列 `column_value` 分配了唯一的行号 `RowOrder`。 ### COLLECT 相比之下,`COLLECT` 是 Oracle、SQL Server 等数据库系统提供的函数,用于收集一组值,并将它们作为数组返回。这个函数可以配合窗口函数一起使用,常用于统计特定分组内的集合信息,如计数、平均值等。 #### 示例: 假设有一个名为 `orders` 的表,其中包含订单信息,包括客户 ID (`customer_id`)、产品名称 (`product_name`) 和订单日期 (`order_date`)。我们想要获取每个客户的订单列表,并按订单日期排序,同时得到每个客户的订单总数: ```sql WITH ordered_orders AS ( SELECT customer_id, product_name, order_date, RANK() OVER (PARTITION BY customer_id ORDER BY order_date) as rank, COUNT(*) OVER (PARTITION BY customer_id) as order_count FROM orders ) SELECT customer_id, GROUP_CONCAT(product_name SEPARATOR ', ') as products_list, order_count, MAX(order_date) as latest_order_date FROM ordered_orders WHERE rank = 1 -- 只关注最近的一笔订单 GROUP BY customer_id, order_count; ``` 在这个例子中: - `RANK()` 和 `COUNT(*)` 都使用了窗口函数 `OVER()` 进行分组。 - 使用 `GROUP_CONCAT` 功能将 `ordered_orders` 表内同一客户的所有产品名称连接成一个字符串列表。 ### 相关问题: 1. `ROW_NUMBER()` 和 `RANK()` 之间的区别是什么? 2. `ROW_NUMBER()` 如何在复杂查询中优化性能? 3. `COLLECT` 联合窗口函数的应用场景有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值