关于南大通运8ampp数据库的排序函数介绍
RANK OVER函数
RANK() OVER([PARTITION BY col_name1,col_name2,…] ORDER BY
col_name1 [ASC/DESC], col_name2 [ASC/DESC],…)
功能描述:
根据 ORDER BY 子句中表达式的值,从查询返回的每一行计算它们与其它
行的相对位置。组内的数据按 ORDER BY 子句排序,然后给每一行赋一个号,
从而形成一个序列,该序列从 1 开始,往后累加。
每次 ORDER BY 表达式的值发生变化时,该序列也随之增加。有同样值的
行得到同样的数字序号(认为 null 是相等的)。
如果两行得到同样的排序,则后面的序数将跳跃。例如,两行序数为 1,
则没有序数 2,序列将给组中的下一行分配值 3。
仅 Express 引擎支持。
例子
SELECT RANK() OVER(ORDER BY C_TIME) as orderNum
FROM event_logs
DENSE_RANK OVER函数
DENSE_RANK( ) over([PARTITION BY col_name1,col_name2,…] ORDER BY
col_name1 [ASC/DESC], col_name2 [ASC/DESC],…)
功能描述:
基本功能同 rank 类似,区别是如果两行得到同样的排序,则后面的序数
不跳跃。例如,两行序数为 1,序列将给组中的下一行分配值 2。
例子:
SELECT DENSE_RANK( ) over(ORDER BY C_TIME DESC) as orderNum
FROM event_logs
ROW_NUMBER OVER函数
ROW_NUMBER( ) OVER([PARTITION BY col_name1,col_name2,…] ORDER BY
col_name1 [asc/desc], col_name2 [asc/desc],…)
功能描述:
同 rank 的区别就是相同的排序值序号也会依次递增。
例如,两行排序值相同,则序数为 1,2。
仅 Express 引擎支持。
例子:
SELECT ROW_NUMBER() OVER(ORDER BY C_TIME) as orderNum
FROM event_logs
SUM OVER函数
SUM([DISTINCT/ALL] expr) OVER([PARTITION BY …] [ORDER BY …
[ASC/DESC] ]
功能描述:
计算组内表达式的移动累加和。
AVG OVER函数
AVG([DISTINCT/ALL] expr)OVER([PARTITION BY …] [ORDER BY …
[ASC/DESC] ]
功能描述:计算组内表达式的移动平均值。
COUNT OVER函数
COUNT(/[DISTINCT] col ) OVER([PARTITION BY
col_name1,col_name2,…] [ORDER BY col_name1 [ASC/DESC], col_name2
[ASC/DESC],…] )
功能描述:
该函数用于计算分组中的记录数,如果是 COUNT(),不用考虑 NULL 值,
否则,不包含参数为 NULL 的记录,如果包含 DISTINCT,要做去重操作。