mysql分组排序

具体需求为:mysql有一个表model_cluster_info, 字段包括id, city_code, household等,现要求按city_code分组并排序,返回在相同city_code下households特定排名的记录(如60%)

mysql5.7,我用用户自定义变量实现了:

SET @rank_row_num = 0, @prev_city_code = NULL;SELECT t1.city_code as cityCode,t1.myColumn  as `value`,CASEWHEN t1.rank = t2.target_rank_30 THEN 30WHEN t1.rank = t2.target_rank_60 THEN 60END      AS percentFROM (SELECT city_code,myColumn,@rank_row_num := IF(@prev_city_code = city_code, @rank_row_num + 1, 1) AS rank,@prev_city_code := city_codeFROM (SELECTcity_code, COALESCE (${columnName}, 0) AS myColumnFROMmodel_cluster_infoORDER BYcity_code, myColumn desc) AS sorted_data) AS t1JOIN (SELECT city_code,FLOOR(0.3 * total_count) + 1 AS target_rank_30,FLOOR(0.6 * total_count) + 1 AS target_rank_60FROM (SELECT city_code,COUNT(*) AS total_countFROM model_cluster_infoGROUP BY city_code) AS city_totals) AS t2 ON t1.city_code = t2.city_codeWHERE t1.rank = t2.target_rank_30OR t1.rank = t2.target_rank_60;

但是应该是会报错Cause: java.sql.SQLException: sql injection violation, dbType mysql, druid-version 1.2.16, “multi-statement not allow : SET”… 。需要改spring.datasource.druid的设置filter.wall.config.multi-statement-allow:
在这里插入图片描述
设置完成后:
在这里插入图片描述

mysql8.0

但是上述代码在预演、生产环境下跑不通,应该是这两环境是mysql8.0的缘故。所以我为mysql8.0用窗口函数实现如下。而这语法却也是mysql5.7不支持的。

WITH ranked_data AS (SELECT city_code,COALESCE(${columnName}, 0) as value_adjusted,ROW_NUMBER()                  OVER (PARTITION BY city_code ORDER BY COALESCE(${columnName}, 0) DESC) as row_number_within_group, COUNT(*) OVER (PARTITION BY city_code) as total_rows_in_groupFROM model_cluster_info)SELECT city_code      AS cityCode,value_adjusted AS `value`,CASEWHEN row_number_within_group = CEIL(total_rows_in_group * 0.6) THEN 60WHEN row_number_within_group = CEIL(total_rows_in_group * 0.3) THEN 30END        AS percentFROM ranked_dataWHERE row_number_within_group = CEIL(total_rows_in_group * 0.6)OR row_number_within_group = CEIL(total_rows_in_group * 0.3)

其它解法

以下方法就是依靠最基础的联表及分组查询,在mysql5.7、8.0都可以,但是更慢。而偏偏生产环境的是个数据上百万的大表。

select * from (
SELECT g1.id, g1.city_code, g1.households, COUNT(*) AS rank
FROM model_cluster_info AS g1JOIN model_cluster_info AS g2ON g1.city_code = g2.city_codeAND g2.households >= g1.households
GROUP BY g1.id
) T where rank = 30

参考:
Get the rank of a user in a score table

https://dba.stackexchange.com/questions/268148/mysql-8-user-variables-within-expressions-is-deprecated-udf-calls-with-lot-of

How to perform grouped ranking in MySQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tomcat部署

1.客户端和服务器端的交互过程 客户端发送请求给服务器 由服务器中的服务器软件拦截请求 根据请求调动相应的Java业务逻辑执行相关的处理 我们前面知道Java代码的运行势必提前将其装载在JVM上 而服务器软件一般都是由Java代码编写 所以两者都要装载在JVM上 而Java业务逻辑装载…

OpenVoice——强大的语音克隆与生成技术

OpenVoice 是一款由 MyShell TTS 开发的令人惊叹的技术。它只需一小段参考发言者的音频片段,就能精确复制其声音,并能够生成多种语言的语音。 其主要功能包括准确的音色克隆,能够精确地克隆参考音色,并在多种语言和口音中生成语音…

OMG 一个方法的调用改动居然优化了一倍性能!!! ConcurrentHashMap.computeIfAbsent 学习

背景 前提:抖音小程序有qps的监控,如果说qps过低就会导致小程序被下架掉。 业务代码非常的简单 一个easy的查询 但是当并非达到 20就 会发现qps降低了10倍 业务需求实现大概这么一个链路 ok 那么此前我们在认识一下 computeIfAbsent 方法(大…

38 线程互斥

目录 1.问题 2.互斥相关概念 3.互斥量 4.互斥量接口 5.修改买票代码 6.互斥量原理 7.锁的封装 8.可重入和线程安全 1. 问题 用一个模拟抢票过程的程序引出本节话题,如果有1000张票,设为全局变量,生成3个线程每隔一秒抢一张票,如…

快速搭建 Web自动化测试框架

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 在程序员的世界中,一切重复性的工作,都应该通过程序自动执行。「自动化测…

美国站群服务器常见的操作系统选项

美国站群服务器常见的操作系统选项 美国站群服务器是一种灵活且可扩展的服务器解决方案,可以用于托管和管理多个网站和应用程序。在选择合适的美国站群服务器时,一个重要的考虑因素是其支持的操作系统。本文将介绍美国站群服务器常见的操作系统选项&…

第十五届蓝桥杯省赛第二场C/C++B组H题【质数变革】题解

解题思路 首先,我们考虑一下整个数组都是由质数构成的情况。 当我们要将质数 x x x 向后移 k k k 个时,如果我们可以知道质数 x x x 在质数数组的下标 j j j,那么就可以通过 p r i m e s [ j k ] primes[j k] primes[jk] 来获取向后…

C语言实验-函数与模块化程序设计

一: 编写函数fun,其功能是:输入一个正整数,将其每一位上为偶数的数取出重新构成一个新数并输出。主函数负责输入输出,如输入87653142,则输出8642。(main函数->fun函数) #define _…

.NET 解决Linux下Couldn‘t find a valid ICU package installed on the system异常的问题

最近使用.NET发布独立的Linux x64程序,在CentOS7.9的最小化安装系统上运行,结果运行不了,启动就报异常“Process terminated. Couldnt find a valid ICU package installed on the system. Please install libicu (or icu-libs) using your p…

周三多《管理学原理》第3版/考研真题/章节练习题

普通高等教育“十一五”国家级规划教材《管理学原理》(第3版,周三多、陈传明、龙静编著,南京大学出版社)是我国高校广泛采用的管理学权威教材之一,也被众多高校(包括科研机构)指定为考研考博专业…

深度解析 Spring 源码:从BeanDefinition源码探索Bean的本质

文章目录 一、BeanDefinition 的概述1.1 BeanDefinition 的定位1.2 BeanDefition 的作用 二、BeanDefinition 源码解读2.1 BeanDefinition 接口的主要方法2.2 BeanDefinition 的实现类2.2.1 实现类的区别2.2.2 setBeanClassName()2.2.3 getDependsOn()2.2.4 setScope() 2.3 Bea…

关于修改hosts,浏览器并没有刷新生效的问题.

1.windows系统用cmd命令: ipconfig /flushdns 进行刷新.并查看本地解析是否已经刷新. 2.检查是否开了,代理,代理还是有影响的,关闭,不然不会生效 3.针对谷歌浏览器解决方案: 访问: chrome://net-internals/?#sockets 点击close idle sockets和flush socket pools,,,清…

2024年申请海外访问学者,需要注意些什么呢?

越来越多的国内医院对于医生职称晋升有海外经历要求,医生出于临床技能提高和科研思维拓展,自己也有海外进修的需求,并且可以了解世界先进医疗理念及科研进展,何乐而不为? 其实,很多医生已经赶上早班车,通…

AI大模型探索之路-实战篇2:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

【QGIS如何进行WKT可视化】

点击插件——python控制台 渲染线图层wkt = LINESTRINGZ (405223.79236294992733746767 3294798.52338150842115283012 0, 405250.43677213048795238137 3294767.52838639216497540474 0, 405272.27118375105783343315 3294735.17657975200563669205 0, 405363.435978673573117…

局域网屏幕桌面监控哪个软件比较好?哪款好用?

在企业、教育机构或其他组织中,出于提高工作效率、保障数据安全、规范员工行为等目的,对局域网内电脑屏幕进行实时监控的需求日益凸显。 面对市场上众多屏幕监控软件,选择一款功能全面、稳定可靠且符合法规要求的产品至关重要。 在局域网屏幕…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第15课-xcard方式跳转平行3D馆

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第15课-xcard方式跳转平行3D馆 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智…

【C/C++】动态内存管理(C:malloc,realloc,calloc,free || C++:new,delete)

🔥个人主页: Forcible Bug Maker 🔥专栏: C | | C语言 目录 前言C/C内存分布C语言中的动态内存管理:malloc/realloc/realloc/freemallocrealloccallocfree C中的动态内存管理:new/deletenew和delete操作内…

港口数据复杂不知道如何监控?来试试FineVis所展现的智慧港口看板

一、智慧港口是什么 智慧港口代表着港口建设的未来趋势和发展方向。以信息物理系统为框架,智慧港口通过创新应用高新技术,实现了物流供给方和需求方之间的沟通,并将它们融入集疏运一体化系统中。这种系统极大地提升了港口及其相关物流园区对…

【LeetCode:1103. 分糖果 II + 模拟】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…