我是靠谱客的博主 英勇汉堡,最近开发中收集的这篇文章主要介绍分区查询 PARTITION BY,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

分区查询 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() ,所以会报语法错误。

最后

以上就是英勇汉堡为你收集整理的分区查询 PARTITION BY的全部内容,希望文章能够帮你解决分区查询 PARTITION BY所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部