概述
分区查询 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)
方法1:
SELECT 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
方法2:
SELECT 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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复