mysql每组结果分页显示_SQL语句mysql分组统计并对每组分页
最近一个需求如图,为了避免多次查询数据库,就想着尽量写成一个SQL语句
最相关人物
最相关联系方式
最相关邮箱
最相关地址
张三
23
18900000000
24
本人
12
广东省深圳市龙华区某某街道某某小区5栋1608
14
李四
18
18900000001
18
本人
9
湖南省长沙市某某县
13
王五
15
18900000002
15
本人
5
赵六
11
18900000000
13
非本人
钱七
5
观察这个结果,发现数据有4中类型,每种类型都是现实每种类型的value的值,后面跟的是该value的统计数量,最终只显示数量最多的5条。
那么我们就需要对类型、value进行分组统计,但是联系方式处却还有要对关系(本人、非本人)进行分组统计,其他的三种不需要对该关系分组。
SQL如下:
-- 1、该层取指定的条数
select
t.columnDataType as dataType, t.columnDataValue as title, t.counts as count, t.columnDataRelation
from (
-- 2、该层对分的组进行排序
select
t3.columnDataType, t3.columnDataValue, t3.counts, t3.columnDataRelation,
case when @columnDataType=t3.columnDataType then @num:=@num+1 else @num:=1 end rank,
@columnDataType:=t3.columnDataType
from (
-- 3、该层对数据类型、值、关系分组:由于内层已经将不需要区分关系的统计的结果中关系字段统一为一个值了,所以这里再次分组统计后,每种(数据类型、值一致的数据)需要分组的结果行数就是关系的种类数,不需要分组的结果的行数就是一行
select
tmp.columnDataType, tmp.columnDataValue,
sum(tmp.counts) as counts,
tmp.columnDataRelation
from (
-- 4、该层对数据类型、值、关系分组:需要对关系分组的那么关系的值保留,不需要对关系分组的那么关系字段统一输出为一个值
select
t2.column_data_type as columnDataType,t2.column_data_value as columnDataValue,
if(t2.column_data_type in ('0'), t2.column_data_relation, '') as columnDataRelation , count(1) as counts
from 数据主表 t1
inner join 数据明细表 t2 on t1.id_ep_model_analysis = t2.search_index
where t1.search_flow_no='2aff02fccb79471cb34e17723a9d9b1d' and t2.column_data_relation in ('0', '1')
group by t2.column_data_type, t2.column_data_value, t2.column_data_relation
) tmp
group by tmp.columnDataType, tmp.columnDataValue, tmp.columnDataRelation
) t3select
t.columnDataType as dataType, t.columnDataValue as title, t.counts as count,
case when t.columnDataRelation='0' then '非本人' when t.columnDataRelation='1' then '本人' else '' end as flag
from (
select
t3.columnDataType, t3.columnDataValue, t3.counts, t3.columnDataRelation,
case when @columnDataType=t3.columnDataType then @num:=@num+1 else @num:=1 end rank,
@columnDataType:=t3.columnDataType
from (
select
tmp.columnDataType, tmp.columnDataValue, sum(tmp.counts) as counts, tmp.columnDataRelation
from (
select
t2.column_data_type as columnDataType,t2.column_data_value as columnDataValue,
if(t2.column_data_type in ('0'), t2.column_data_relation, '') as columnDataRelation , count(1) as counts
from ep_model_analysis t1
inner join ep_model_analy_dtl t2 on t1.search_index = t2.search_index
where t1.search_flow_no='f8ff8b0764544e4f8c3d79f80c2a2f77'
group by t2.column_data_type, t2.column_data_value, t2.column_data_relation
) tmp
group by tmp.columnDataType, tmp.columnDataValue, tmp.columnDataRelation
order by tmp.columnDataType
) t3, (SELECT @num:=0, @columnDataType:='') t4
order by t3.columnDataType, t3.counts desc, t3.columnDataValue
) t
where t.rank <= 5
order by t3.columnDataType, t3.counts
) t
where t.rank <=5
;
结果示例如下:
-- 上面的SQL结果:
/*
例如:
4查询之后的结果为:
columnDataType columnDataValue columnDataRelation counts
1 数据1 0 11
1 数据1 1 3
1 数据3 0 13
1 数据3 1 4
1 数据4 0 31
1 数据4 1 14
1 数据5 0 23
1 数据5 1 8
2 数据2 12
2 数据2 5
2 数据6 121
2 数据6 51
2 数据7 124
2 数据7 54
2 数据8 23
2 数据8 5
2 数据9 34
2 数据9 5
2 数据10 15
2 数据10 6
2 数据11 18
2 数据11 5
3查询之后的结果为:
columnDataType columnDataValue columnDataRelation counts
1 数据1 0 11
1 数据1 1 3
1 数据3 0 13
1 数据3 1 4
1 数据4 0 31
1 数据4 1 14
1 数据5 0 23
1 数据5 1 8
2 数据2 17
2 数据6 172
2 数据7 178
2 数据8 28
2 数据9 39
2 数据10 21
2 数据11 23
2查询之后的结果为:
columnDataType columnDataValue columnDataRelation counts rank
1 数据4 0 31 1
1 数据5 0 23 2
1 数据4 1 14 3
1 数据3 0 13 4
1 数据1 0 11 5
1 数据5 1 8 6
1 数据3 1 4 7
1 数据1 1 3 8
2 数据7 178 1
2 数据6 172 2
2 数据9 39 3
2 数据8 28 4
2 数据11 23 5
2 数据10 21 6
2 数据2 17 7
1查询之后的结果为:
columnDataType columnDataValue columnDataRelation counts
1 数据4 0 31
1 数据5 0 23
1 数据4 1 14
1 数据3 0 13
1 数据1 0 11
2 数据7 178
2 数据6 172
2 数据9 39
2 数据8 28
2 数据11 23
最终显示的结果就是:
1、columnDataType=1的需要显示关系,取总数最多的五条,
2、columnDataType=2的不显示关系,取总数最多的五条
*/
mysql每组结果分页显示_SQL语句mysql分组统计并对每组分页相关推荐
- MySql按周,按月,按日分组统计数据、日期计算。并统计环比、同比
MySql按周,按月,按日分组统计数据 <!-- 按日查询 --> SELECT DATE_FORMAT(created_date,'%Y-%m-%d') as time,sum(mone ...
- mysql查询所有课程的分数_Sql语句之查询所有学生所有科目分数及总分
昨天练Sql语句,数据库建了四个表分别是,学生表,课程表,成绩表以及教师表(教师表不在讨论范围),突然想到以前高中时代老师手上的那张成绩表,然后我就寻思着能不能用Sql语句把表打印出来,以下是我的思考 ...
- python 数据分组后看每组多少个_【Python】分组统计GroupBy技术详解
摘要 进行数据分析时,GroupBy分组统计是非常常用的操作,也是十分重要的操作之一.基本上大部分的数据分析都会用到该操作,本文将对Python的GroupBy分组统计操作进行讲解. 1.GroupB ...
- mysql 排名_SQL语句mysql排名、分组后组内排名、取各组的前几名
数据: 一.整体排名(3种) -- 普通排名:从1开始,顺序往下排 set @rank =0;select city , score, @rank := @rank+1 rank from cs or ...
- mysql从大到小排序_sql语句时间排序 sql语句按照时间排序
sql语句时间排序 sql语句按照时间排序以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL按时间排序 select ...
- mysql如何查询前几天_sql语句查询mysql怎么取前几天的数据
满意答案 hong1992416 2015.03.24 采纳率:54% 等级:12 已帮助:12747人 一.当天或当日插入的数据: 1.传统对比判断:SELECT * FROM `t` WHE ...
- mysql怎样添加一条数据_sql语句怎么添加一条记录?
展开全部 sql语句中,添加记录的语法为:insert into 表名 (col1,col2....coln)values(value1,value2.....valuen): 其中,如果你插入的每一 ...
- mysql sql查询昨天的数据_sql语句,查询昨天的数据
如果在程序中,有前台传来两个时间点:beginTime和endTime,在sql查询中的限制条件就是查询昨天的数据,那么可以这样写: 但是如果在这里要查询昨天的数据的话, 则不能简单地在开始时间的那里 ...
- mysql中两个表连接_SQL语句中两个表的连接
展开全部 一.外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student ...
最新文章
- 构建一个运行在Azure虚拟机上的MySQL Spring Boot应用程序
- LSMW批处理使用方法(07)_步骤6、7
- Java基础-面向对象第二特征之继承(Inheritance)
- 程序内存一直在泄漏,原来是异步死循环了 !
- 怎样改动SharePoint管理中心的语言
- 干货| LeNet-5模型详解(附Python详细代码及注释)
- 右键菜单_右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项
- jdk下载安装并配置环境
- spring5.0学习笔记1
- mysql初始化登录报错解决-1
- 如何在程序中安装指定apk文件
- 调度工具之Azkaban 介绍
- 不同风格吉他曲目收录
- FTPClientUtil FTP客户端工具
- assign和weak的区别
- C语言实现来实现字符串反转,只有单词顺序反转,组成单词的字母不反转
- 将 EGL 代码与 DXGI 和 Direct3D 进行比较
- IDEA中配置数据库连接
- 汉语编程、中文编程、国产C语言-习语言4714(2016)版下载及教程
- 云景网络科技面试题【杭州多测师】【杭州多测师_王sir】
热门文章
- c语言判断字符是否对称,2020-07-23(C语言)数据结构-试设计算法判断该链表的全部n个字符是否中心对称。...
- 计算机中的越界英文怎么说,计算机与网络英语词汇(T4)
- 涛涛打保龄球 【map】篝火晚会(两道题)
- Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding
- ssm+layui 超市管理系统 大学期末作业详解(1)
- python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图
- 【中亦安图】小机上运行Oracle需要注意的进程调度bug(1)
- ipp协议 服务器,IPP远程服务
- 【翻译】CEDEC2014[跨越我的尸体2]跨越Stylized Rendering
- 2022P气瓶充装判断题及在线模拟考试