数据库常用函数用法

本文介绍了SQL中的over函数及如何与分析函数如rank(), row_number()等配合使用,实现数据分组排序、生成行号等功能。同时探讨了ONLY_FULL_GROUP_BY模式下GROUP BY语句的正确使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

over()函数

over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
其参数:over(partition by columnname1 order by columnname2)
含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。


例如:employees表中,有两个部门的记录:department_id =10和20
select department_id,rank() over(partition by department_id order by salary) from employees就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。如果是partition by org_id,则是在整个公司内进行排名。

以下是个人见解:

sql中的over函数和row_numbert()函数配合使用,可生成行号。可对某一列的值进行排序,对于相同值的数据行进行分组排序。

执行语句:select row_number() over(order by AID DESC) as rowid,* from bb

rank()函数

RANK()函数为结果集的分区中的每一行分配一个排名。行的等级由一加上前面的等级数指定

RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)
partition by 作为分区,可以不进行分区。
 

例:不加分区

 例:加分区

通俗的讲就是:对于用到GROUP BY的select语句,查出来的列必须是group by后面声明的列,或者是聚合函数里面的列

有这样一个数据库的表

select语句:select id, sum(appr_id) from appr group by id------------------------------------(合法)

select语句:select id, user_id, sum(appr_id) from appr group by id-------------------------(合法)

select语句:select id, sum(appr_id) from appr group by role----------------------------------(不合法)

select语句:select id, user_id, sum(appr_id) from appr group by role-----------------------(不合法)

select语句:select * from appr group by role-------------------------------------------------------(不合法)

经过大量测试:笔者发现了ONLY_FULL_GROUP_BY这种模式的特点:

1:只要有聚合函数sum(),count(),max(),avg()等函数就需要用到group by,否则就会报上面的错误。

2:group by id(id是主键)的时候,select什么都没有问题,包括有聚合函数。

3:group by role(非主键)的时候,select只能是聚合函数和role(group by的字段),否则报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值