分区查询 PARTITION BY

1 篇文章 0 订阅

分区查询 PARTITION BY

最近遇到一个关于分区查询的问题,如下:
4) 为了展示季节与服装颜色的关系,请统计每个季节数量最多的5种颜色,并使用堆叠条形图展示每个季节最受欢迎的颜色。其中,横坐标表示颜色数量,纵坐标表示不同季节,颜色代表服装颜色。

而数据表如下:

在这里插入图片描述

在mysql中没有分区查询,也就是mysql不支持 over(PARTITION BY wei_pin_hui_1.ji_jie ORDER BY wei_pin_hui_1.yan_se),
这个分区查询是Oracle数据库中的,所以mysql要实现分区查询就不能使用这个查询函数了,就需要用其他方法实现。

如下链接:
mysql实现over partition by 的查询(分组排序求TOP)

方法1SELECT TBL.ID,TBL.PRODUCTNAME,TBL.TYPENAME,TBL.SALECOUNT
FROM PRODUCT TBL
LEFT JOIN PRODUCT L_TBL ON TBL.TYPENAME = L_TBL.TYPENAME AND TBL.SALECOUNT< L_TBL.SALECOUNT
GROUP BY TBL.ID,TBL.PRODUCTNAME,TBL.TYPENAME,TBL.SALECOUNT
HAVING COUNT(L_TBL.ID)< 3
ORDER BY TBL.TYPENAME,TBL.SALECOUNT DESC

方法2SELECT TBL.ID,TBL.PRODUCTNAME,TBL.TYPENAME,TBL.SALECOUNT
FROM PRODUCT TBL
WHERE 3>(SELECT COUNT(*) FROM PRODUCT WHERE TYPENAME =TBL.TYPENAME AND SALECOUNT>TBL.SALECOUNT)
ORDER BY TBL.TYPENAME,TBL.SALECOUNT DESC

按照上述方法,进行改写自己的sql

select w1.wei_pin_hui_1_ji_jie, w1.wei_pin_hui_1_yan_se,w1.count_1 
from w1 where 5>(select count(*)  from w1 t where t.wei_pin_hui_1_ji_jie=w1.wei_pin_hui_1_ji_jie and t.count_1>w1.count_1 ) 
ORDER BY  wei_pin_hui_1_ji_jie ,count_1 desc ;




select t1.wei_pin_hui_1_ji_jie, t1.wei_pin_hui_1_yan_se,t1.count_1 
from w1 t1 
LEFT JOIN w1 t2 on t1.wei_pin_hui_1_ji_jie =t2.wei_pin_hui_1_ji_jie and t1.count_1<t2.count_1
GROUP BY t1.wei_pin_hui_1_ji_jie, t1.wei_pin_hui_1_yan_se,t1.count_1 
HAVING count(t2.wei_pin_hui_1_ji_jie) <5
ORDER BY t1.wei_pin_hui_1_ji_jie, t1.count_1 desc;

如上sql语句,查询出来的数据结果有一些问题,就是如果值都是一样的话,就会出现很多条数据了,没有办法实现具体取出前几条,

在这里插入图片描述

在用flask+flask_sqlalchemy+echarts作图时,读mysql数据库时
sqlalchemy中有over() 分区排序这个函数,

Python sqlalchemy 模块,over() 实例源码

print(db.session.query(wei_pin_hui_1.ji_jie,wei_pin_hui_1.yan_se,over(func.count(wei_pin_hui_1.yan_se),partition_by=wei_pin_hui_1.ji_jie,order_by=func.count(wei_pin_hui_1.yan_se))))

输出:

SELECT wei_pin_hui_1.ji_jie AS wei_pin_hui_1_ji_jie, wei_pin_hui_1.yan_se AS wei_pin_hui_1_yan_se, count(wei_pin_hui_1.yan_se) OVER (PARTITION BY wei_pin_hui_1.ji_jie ORDER BY count(wei_pin_hui_1.yan_se)) AS anon_1 
FROM wei_pin_hui_1

但是运行时就会报错:sql语法错误
原因:是这个是读mysql的,mysql不支持 OVER() ,所以会报语法错误。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值