You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中row_number()、rank()、dense_rank()后括号的作用是什么?

SQL中row_number()、rank()、dense_rank()后括号的用途

这三个都是SQL里的无参数窗口函数,它们后面的括号主要有两个关键作用:

  • 标识函数调用,区分普通标识符:SQL语法规定,函数必须通过()来声明是调用行为,哪怕不需要传入参数也不能省略括号。如果去掉括号写成row_number,数据库会把它当成一个列名或变量来查找,找不到就会抛出语法错误。
  • 保持语法一致性,预留扩展空间:和其他需要参数的窗口函数(比如sum(col)、avg(col))的语法结构统一,让SQL语句的写法更规整。同时,括号的存在也为后续SQL方言的功能扩展预留了语法空间,哪怕当前主流数据库里这三个函数不需要参数,也能保证语法的兼容性。

举个实际的例子,正确的用法是:

SELECT
  student_name,
  exam_score,
  row_number() OVER(ORDER BY exam_score DESC) AS row_num,
  rank() OVER(ORDER BY exam_score DESC) AS ranking,
  dense_rank() OVER(ORDER BY exam_score DESC) AS dense_ranking
FROM exam_results;

如果把函数后的括号去掉,比如写成row_number OVER(...),数据库会直接报错,因为无法识别这是一个窗口函数调用。

注意:别把这个括号和后面OVER()里的括号搞混——OVER()里的内容是用来定义窗口范围(比如分区、排序规则)的,而函数名后的括号是属于函数本身的语法要求。

内容的提问来源于stack exchange,提问作者Ayyappa Maruthi Alapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:30:55