MySQL窗口函数 PARTITION BY()函数介绍

前期数据准备

# 创建数据库
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','南宁');

一、PARTITION BY与GROUP BY区别

一、函数类型

group by 是分组函数,partition by是分析函数

二、执行顺序

from > where > group by > having > order,而partition by应用在以上关键字之后,可以简单理解为就是在执行完select之后,在所得结果集之上进行partition by分组

二、查询结果

partition by 相比较于group by,能够在保留全部数据的基础上,只对其某些字段做分组排序,而group by则保留参与分组的字段和聚合函数的结果,类似excel中的透视表

二、PARTITION BY的基本用法

  • 在OVER()中添加PARTITION BY
# 查询每种商品的id,name,同类型商品数量
select id,name,count(*) over (partition by type) from product;
  • PARTITION BY传入多列
# 查询每个城市每个类型价格最高的商品名称
select
       name,
       price,
       type,
       max(price) over (partition by address,type) as 'max_price'
from product;
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值