KingbaseES DENSE_RANK 函数用法

本文介绍了DENSE_RANK()函数在数据库查询中的应用,特别是在对结果集进行分区排名时如何保持排名连续性。通过示例展示了如何在SQL中使用DENSE_RANK()对产品价格进行降序排名,当价格相同时,该函数会给出相同的排名值。
摘要由CSDN通过智能技术生成

DENSE_RANK()函数用于为结果集分区内的每一行分配一个排名,排名值之间没有差距,函数为结果集的每个分区中的每一行分配一个等级。
与 RANK() 函数不同的是,DENSE_RANK() 函数总是返回连续的排名值。对于每个分区,DENSE_RANK() 函数为具有相同值的行返回相同的排名。

语法

DENSE_RANK() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

DENSE_RANK() 函数应用于PARTITION BY子句定义的每个分区中的每一行,按ORDER BY子句指定的排序顺序。跨越分区边界时,它会重置排名。PARTITION BY 子句是可选的。如果跳过它,DENSE_RANK() 函数会将整个结果集视为单个分区。

示例

构造数据:
CREATE TABLE products (
    product_id serial PRIMARY KEY,
    product_name VARCHAR (255) NOT NULL,
    price DECIMAL (11, 2),
    group_id INT NOT NULL
);

INSERT INTO products (product_name, group_id, price)
VALUES
    ('Microsoft Lumia', 1, 200),
    ('HTC One', 1, 400),
    ('Nexus', 1, 500),
    ('iPhone', 1, 900),
    ('HP Elite', 2, 1200),
    ('Lenovo Thinkpad', 2, 700),
    ('Sony VAIO', 2, 700),
    ('Dell Vostro', 2, 800),
    ('iPad', 3, 700),
    ('Kindle Fire', 3, 150),
    ('Samsung Galaxy Tab', 3, 200);

使用DENSE_RANK()按标价对产品进行排名:
test=# SELECT
test-#     product_id,
test-#     product_name,
test-#     price,
test-#     DENSE_RANK () OVER ( 
test(#         ORDER BY price DESC
test(#     ) price_rank 
test-# FROM products;
 product_id |    product_name    |  price  | price_rank 
------------+--------------------+---------+------------
          5 | HP Elite           | 1200.00 |          1
          4 | iPhone             |  900.00 |          2
          8 | Dell Vostro        |  800.00 |          3
          6 | Lenovo Thinkpad    |  700.00 |          4
          7 | Sony VAIO          |  700.00 |          4
          9 | iPad               |  700.00 |          4
          3 | Nexus              |  500.00 |          5
          2 | HTC One            |  400.00 |          6
         11 | Samsung Galaxy Tab |  200.00 |          7
          1 | Microsoft Lumia    |  200.00 |          7
         10 | Kindle Fire        |  150.00 |          8
(11 行记录)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值