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中COALESCE函数示例详解

    MySQL中COALESCE函数示例详解

    COALESCE 是一个功能强大且常用的 SQL 函数,主要用来处理 NULL 值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,这篇文章主要介绍了MySQL中COALESCE函数,需要的朋友可以参考下
    2025-03-03
  • mysql缺少my.ini文件的最佳解决方法

    mysql缺少my.ini文件的最佳解决方法

    my.ini是MySQL数据库中使用的配置文件,修改这个文件可以达到更新配置的目的,下面这篇文章主要给大家介绍了关于mysql缺少my.ini文件的最佳解决方法,需要的朋友可以参考下
    2024-01-01
  • MySQL进阶SELECT语法篇

    MySQL进阶SELECT语法篇

    从这个基本语法可以看出,最简单的SELECT语句是SELECT select_list,实际上利用这个最简单的SELECT语句,你也可以完成许多你期待的功能,首先你能利用它进行MySQL所支持的任何运算,例如:SELECT 1+1,它将返回2;其次,你也能利用它给变量赋值,而在PHP中,运用SELECT语句的这种功能,你就可以自由地运用MySQL的函数为PHP程序进行各种运算,并赋值给变量。在很多的时候,你会发现MySQL拥有许多比PHP更为功能强大的函数。
    2008-04-04
  • MySQL中获取当前时间格式的方法汇总

    MySQL中获取当前时间格式的方法汇总

    在MySQL数据库开发中,获取时间是一个常见的需求,MySQL提供了多种方法来获取当前日期、时间和时间戳,并且可以对时间进行格式化、计算和转换,以下是一些常用的MySQL时间函数及其示例,需要的朋友可以参考下
    2024-06-06
  • MYSQL数据库Innodb 引擎mvcc锁实现原理

    MYSQL数据库Innodb 引擎mvcc锁实现原理

    这篇文章主要介绍了MYSQL数据库Innodb 引擎mvcc锁实现原理,但是mvcc 的实现原理是什么呢?下文我们就来实例说明来mvcc 的实现原理,感兴趣的小伙伴可以参考一下
    2022-05-05
  • Mysql的并发参数调整详解

    Mysql的并发参数调整详解

    大家好,本篇文章主要讲的是Mysql的并发参数调整详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Mysql数据库之Binlog日志使用总结(必看篇)

    Mysql数据库之Binlog日志使用总结(必看篇)

    下面小编就为大家带来一篇Mysql数据库之Binlog日志使用总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C++连接使用MySQL的方法

    C++连接使用MySQL的方法

    这篇文章主要为大家详细介绍了C++连接使用MySQL的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • mysql分表分库的应用场景和设计方式

    mysql分表分库的应用场景和设计方式

    为大家讲述一下在mysql在什么到时候需要进行分表分库,以及现实的设计方式。
    2017-11-11
  • MySQL sql_mode的使用详解

    MySQL sql_mode的使用详解

    这篇文章主要介绍了MySQL sql_mode的使用详解,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05

最新评论