聚合函数(只有一个返回值[用在数据表当中])
AVG() 平均值
select round(avg(goods_price),2) as avg_price from goods(取2位小数)
count() 计数
max() 最大值
min() 最小值
sum() 求和
ROW_NUMBER() OVER函数
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序
row_number() OVER(PARTITION BY)与 rank() OVER(PARTITION BY) 区别:前者有两个并列第一则返回一条记录,后者返回两条,同时是跳跃排序;dense_rank()是连续排序!!(mySql中不支持这种查询方法)
例子:
create table employee(
id smallint unsigned primary key auto_increment,
deptid varchar(20) default null,
salary decimal(10,2)
);
insert into employee (deptid,salary) values ('10',5500.00),('10',4500.00),('20',1900.00),('20',4800.00),('40',6500.00),('40',14500.00),('40',44500.00),('50',6500.00),('50',7500.00);
+----+--------+----------+
| id | deptid | salary |
+----+--------+----------+
| 1 | 10 | 5500.00 |
| 2 | 10 | 4500.00 |
| 3 | 20 | 1900.00 |
| 4 | 20 | 4800.00 |
| 5 | 40 | 6500.00 |
| 6 | 40 | 14500.00 |
| 7 | 40 | 44500.00 |
| 8 | 50 | 6500.00 |
| 9 | 50 | 7500.00 |
+----+--------+----------+
这种结构
需求:根据部门分组,显示每个部门的工资等级
预期结果
select *,row_number() over (partition by deptid order by salary desc) rank from employee;
但是mysql好像不支持,pg和oracle支持