//贴一下大概的例子
表结构:
D号 工资 部门 修改时间
userid salary dept motidydate
1 2000 1 2020-12-13
2 1000 1 2020-12-13
3 500 2 2020-12-13
4 1000 2 2020-12-14
SELECT MIN (salary) OVER (PARTITION BY dept ) salary, dept
FROM ss
运行后得到:
1000 1
1000 1
500 2
500 2
这个函数长这个样子:OVER(PARTITION BY… ORDER BY…)
顾名思义,PARTITION 中文是分割的意思,ORDER 是排序的意思,所以翻译一下就是先把一组数据按照制定的字段进行分割成各种组,然后组内按照某个字段排序。
前面的话支持一些函数搭配使用,over()是不可以单独使用的
count() over(partition by ... order by ...):求分组后的总数。
max() over(partition by ... order by ...):求分组后的最大值。
min() over(partition by ... order by ...):求分组后的最小值。
avg() over(partition by ... order by ...):求分组后的平均值。
lag() over(partition by ... order by ...):取出前n行据。
lead() over(partition by ... order by ...):取出后n行数据。
rank()和dense_rank()可以将所有的都查找出来,rank可以将并列第一名的都查找出来;rank()和dense_rank()区别:rank()是跳跃排序,有两个第二名时接下来就是第四名。
row_number()