mysql分组后如何获取每个组的第一条数据

 更新时间:2023年08月11日 16:04:31   作者:Xu_jesse  
这篇文章主要介绍了mysql分组后如何获取每个组的第一条数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql分组后获取每个组的第一条数据

已知:subject表(主题表),主题表为树形表

path字段,使用分隔符###,将主题编码从一级到本级主题编码,拼接起来,便于查询主题下子主题数据。

现在,需要根据path排序,聚合查询一级主题的名称和条数。

直接上结果:

两种写法:

一:内层distinct

select tt.name as subjectName,path,count(*) as countNum from  (select **distinct t.table_id_**, t.SUBJECT_ID_, s.name_ as name,path_,SUBSTRING_INDEX(path_,'###',1) as path from model_table t  join hdgp_standard_subject s on t.SUBJECT_ID_ = s.id_ where t.IS_DELETE_ = 0 and !isnull(t.SUBJECT_ID_) and t.VERSION_TYPE_ = 'formal' order by s.path_  ) tt group by tt.path ;

二:内层group

select tt.name as subjectName,path,count(*) as countNum from  (select t.SUBJECT_ID_, s.name_ as name,path_,SUBSTRING_INDEX(path_,'###',1) as path from model_table t  join hdgp_standard_subject s on t.SUBJECT_ID_ = s.id_ where t.IS_DELETE_ = 0 and !isnull(t.SUBJECT_ID_) and t.VERSION_TYPE_ = 'formal' **group by t.table_id_** order by s.path_  ) tt group by tt.path ;

解释一下:

直接查询是查不出想要的结果的,需要嵌套子查询。但是只嵌套只查询也是有问题的,内层循环也需要进行过滤一下,可以使用distinct或者group ,再联合order by 进行排序,才能获取想要的结果。

这样写,发现一个问题,就是如果只有子主题的话,就查不出来一级主题了,改进如下:(多关联一遍,这样子查询都省了)

SELECT
    ss.NAME_ AS subjectName,
    count(*) AS countNum
FROM
    model_table t
        JOIN hdgp_standard_subject s ON t.SUBJECT_ID_ = s.id_
        JOIN hdgp_standard_subject ss ON SUBSTRING_INDEX( s.path_, '###', 1 ) = ss.CODE_
WHERE
    t.IS_DELETE_ = 0
  AND ! isnull( t.SUBJECT_ID_ )
  AND t.VERSION_TYPE_ = 'formal'
GROUP BY
    ss.code_

mysql获取每组的第二条记录

-- rank 第n次重复, last_patient表中某一重复字段名称
SELECT
 t.id,t.patient_id,t.patient_name
FROM (
	select 
		id,patient_id,patient_name,
	  if(@last_patient = a.patient_id,@rank := @rank+1,@rank := 1) AS "rank", -- 判断 当前patient_id与@last_patient是否相等,不相等rank为1,相等时rank加1,
		@last_patient := a.patient_id
	FROM lis_data_collection a,(SELECT @rank:=0,@last_patient:="") r -- 声明两个变量@rnak及@last_patient,并初始化
	ORDER BY a.id asc
) t 
where rank= 2
ORDER BY id ASC

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql中find_in_set()函数的使用详解

    mysql中find_in_set()函数的使用详解

    这篇文章主要介绍了mysql中find_in_set()函数的使用,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • MySQL中数据类型相关的优化办法

    MySQL中数据类型相关的优化办法

    这篇文章主要介绍了MySQL中数据类型相关的优化办法,包括使用多列索引等相关的优化方法,需要的朋友可以参考下
    2015-07-07
  • 基于Windows安装MySQL 8.0.12图文教程

    基于Windows安装MySQL 8.0.12图文教程

    这篇文章主要为大家详细介绍了基于Windows安装MySQL 8.0.12图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • mysql树目录查询语句优化提高查询效率

    mysql树目录查询语句优化提高查询效率

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql树目录查询语句优化提高查询效率的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 详解mysql 中的锁结构

    详解mysql 中的锁结构

    这篇文章主要介绍了mysql 中的锁结构的相关资料,帮助大家更好的理解和使用数据库,感兴趣的朋友可以了解下
    2020-10-10
  • mysql数据库常见基本操作实例分析【创建、查看、修改及删除数据库】

    mysql数据库常见基本操作实例分析【创建、查看、修改及删除数据库】

    这篇文章主要介绍了mysql数据库常见基本操作,结合实例形式分析了mysql创建、查看、修改及删除数据库实现方法与操作注意事项,需要的朋友可以参考下
    2020-04-04
  • MySQL执行计划详解

    MySQL执行计划详解

    给大家带来了关于mysql的相关知识,主要介绍了从Mysql源码中分析执行计划,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈,需要的朋友可以参考下
    2022-09-09
  • SQL使用WHERE条件语句的项目实践

    SQL使用WHERE条件语句的项目实践

    本文将介绍WHERE子句中使用的通用语法,它还将概述如何在单个WHERE子句中组合多个搜索条件谓词以更细粒度的方式过滤数据,以及如何使用NOT操作符排除而不是包含满足给定搜索条件的行,感兴趣的可以了解一下
    2023-09-09
  • MySQL利用profile分析慢sql详解(group left join效率高于子查询)

    MySQL利用profile分析慢sql详解(group left join效率高于子查询)

    最近因为一个用了子查询的sql语句查询很慢,严重影响了性能,所以需要进行优化,下面这篇文章主要跟大家介绍了关于MySQL利用profile分析慢sql的相关资料,文中介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • MySQL学习笔记小结

    MySQL学习笔记小结

    这篇文章主要介绍了MySQL学习笔记小结,整体介绍了mysql的很多细节我呢体,学习优化mysql的朋友可以参考下,需要的朋友可以参考下
    2016-05-05

最新评论