MySQL窗口函数 OVER()函数介绍
前期准备的数据
# 创建数据库
create database if not exists shopping charset utf8;
# 选择数据库
use shopping;
# 创建产品表
create table product
(
id int primary key,
name varchar(20),
price int,
type varchar(20),
address varchar(20)
);
# 插入产品数据
insert into shopping.product(id, name, price, type, address) values
(1,商品1,200,type1,北京),
(2,商品2,400,type2,上海),
(3,商品3,600,type3,深圳),
(4,商品4,800,type1,南京),
(5,商品5,1000,type2,成都),
(6,商品6,1200,type3,武汉),
(7,商品7,1400,type1,黑龙江),
(8,商品8,1600,type2,黑河),
(9,商品9,1800,type3,贵州),
(10,商品10,2000,type1,南宁);
一、描述
OVER()的意思就是所有的数据都在窗口中
二、实例
-
OVER() 意思是所有的数据都在窗口中
# 计算所有商品的平均价格 select *,avg(price) over () from product;
-
OVER()用于将当前行与一个聚合值进行比较
# 计算商品价格与平均价格之差 select *,price-avg(price) over () from product;
-
OVER()和COUNT()组合
# 计算所有商品数量 select *,count(id) over() from product;
-
一句SQL中使用两个窗口函数
# 在商品表的基础上,添加平均价格和总金额两列 select *,avg(price) over (),sum(price) over () from product;
-
窗口函数和where一起使用
# 计算type1类型和type2类型的平均价格
select
*, avg(price) over()
from product
where type in (type1,type2);
-
在过滤条件中不能使用OVER()
# 查询所有商品中,价格高于平均价格的商品(报错)
select
*,
avg(price) over()
from product
where price > avg(price) over();
# 查询所有商品中,价格高于平均价格的商品
select
*,
avg(price) over()
from product
where price > (select avg(price) from product);
下一篇:
MySQL 查询七天每天的数据总数
