mysql分組后如何獲取每個(gè)組的第一條數(shù)據(jù)
mysql分組后獲取每個(gè)組的第一條數(shù)據(jù)
已知:subject表(主題表),主題表為樹(shù)形表
path字段,使用分隔符###,將主題編碼從一級(jí)到本級(jí)主題編碼,拼接起來(lái),便于查詢主題下子主題數(shù)據(jù)。
現(xiàn)在,需要根據(jù)path排序,聚合查詢一級(jí)主題的名稱和條數(shù)。
直接上結(jié)果:
兩種寫(xiě)法:
一:內(nèi)層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 ;
二:內(nèi)層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 ;
解釋一下:
直接查詢是查不出想要的結(jié)果的,需要嵌套子查詢。但是只嵌套只查詢也是有問(wèn)題的,內(nèi)層循環(huán)也需要進(jìn)行過(guò)濾一下,可以使用distinct或者group ,再聯(lián)合order by 進(jìn)行排序,才能獲取想要的結(jié)果。
這樣寫(xiě),發(fā)現(xiàn)一個(gè)問(wèn)題,就是如果只有子主題的話,就查不出來(lái)一級(jí)主題了,改進(jìn)如下:(多關(guān)聯(lián)一遍,這樣子查詢都省了)
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次重復(fù), last_patient表中某一重復(fù)字段名稱 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", -- 判斷 當(dāng)前patient_id與@last_patient是否相等,不相等rank為1,相等時(shí)rank加1, @last_patient := a.patient_id FROM lis_data_collection a,(SELECT @rank:=0,@last_patient:="") r -- 聲明兩個(gè)變量@rnak及@last_patient,并初始化 ORDER BY a.id asc ) t where rank= 2 ORDER BY id ASC
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- mysql分組排序如何取第一條數(shù)據(jù)
- MYSQL根據(jù)分組獲取組內(nèi)多條數(shù)據(jù)中符合條件的一條(實(shí)例詳解)
- MySQL按天分組統(tǒng)計(jì)一定時(shí)間內(nèi)的數(shù)據(jù)實(shí)例(沒(méi)有數(shù)據(jù)補(bǔ)0)
- Mysql分組查詢每組最新一條數(shù)據(jù)的三種實(shí)現(xiàn)方法
- mysql如何分別按年/月/日/周分組統(tǒng)計(jì)數(shù)據(jù)詳解
- mysql通過(guò)group?by分組取最大時(shí)間對(duì)應(yīng)數(shù)據(jù)的兩種有效方法
相關(guān)文章
MYSQL 5.6 從庫(kù)復(fù)制的部署和監(jiān)控的實(shí)現(xiàn)
這篇文章主要介紹了MYSQL 5.6 從庫(kù)復(fù)制的部署和監(jiān)控的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
mysql datetime 默認(rèn)值的設(shè)置實(shí)現(xiàn)
在MySQL中,DATETIME類型用于存儲(chǔ)包含日期和時(shí)間部分的值,設(shè)置默認(rèn)值的方式因 MySQL 版本而異,下面就來(lái)介紹一下,感興趣的可以了解一下2025-08-08
mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情
這篇文章主要介紹了mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情,刪除數(shù)據(jù)表的時(shí)候,表的定義和表中所有的數(shù)據(jù)均會(huì)被刪除。因此,在進(jìn)行刪除操作前,最好對(duì)表中的數(shù)據(jù)做一個(gè)備份,以免造成無(wú)法挽回的后果2022-07-07
徹底搞懂MySQL存儲(chǔ)過(guò)程和函數(shù)
我們大家都知道MySQL 存儲(chǔ)過(guò)程是從 MySQL 5.0 開(kāi)始逐漸增加新的功能,下面這篇文章主要給大家介紹了關(guān)于MySQL存儲(chǔ)過(guò)程和函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
mysql中GROUP_CONCAT函數(shù)使用技巧及問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于mysql中GROUP_CONCAT函數(shù)使用技巧及問(wèn)題的相關(guān)資料,GROUP_CONCAT是MySQL中的一個(gè)聚合函數(shù),它用于將多行數(shù)據(jù)按照指定的順序連接成一個(gè)字符串并返回結(jié)果,需要的朋友可以參考下2023-11-11
Mysql備份多個(gè)數(shù)據(jù)庫(kù)代碼實(shí)例
這篇文章主要介紹了Mysql備份多個(gè)數(shù)據(jù)庫(kù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

