mysql如何取分組之后最新的數(shù)據(jù)
一、數(shù)據(jù)表設(shè)計(jì)
二、查詢場(chǎng)景
統(tǒng)計(jì)每門課的考試次數(shù)、最新一次考試的時(shí)間、最新一次考試的錄入成績(jī)的老師
1、統(tǒng)計(jì)沒(méi)門課的考試次數(shù)
#考試次數(shù)統(tǒng)計(jì) select project '科目',count(project) '考試次數(shù)' from score a group by project
查詢結(jié)果:
2、最新一次考試的時(shí)間
#考試次數(shù)統(tǒng)計(jì) 最新一次考試的時(shí)間 select project '科目',count(project) '考試次數(shù)' ,max(create_time) from score a group by project
查詢結(jié)果:
3、分組統(tǒng)計(jì)最新的錄入成績(jī)的老師
當(dāng)我們分組去查詢最新的錄入成績(jī)的老師或者分組查詢最新一次各科的成績(jī)時(shí)確發(fā)現(xiàn)數(shù)據(jù)不是最新的。
SELECT a.id, a.edit_teacher, a.project, a.create_time, a.score, count(project) '考試次數(shù)', max(create_time) '最新數(shù)據(jù)時(shí)間' FROM score a GROUP BY a.project
查詢結(jié)果:
但是很顯然我們需要查詢的數(shù)據(jù)id應(yīng)該是4、8、12
可以看出分組聚合的時(shí)候默認(rèn)查詢的是分組之后的第一條數(shù)據(jù),那么我們想要查詢最新的數(shù)據(jù)需要新對(duì)我們的數(shù)據(jù)進(jìn)行排序
SELECT *, count( project ) '考試次數(shù)', max(create_time) '最新數(shù)據(jù)時(shí)間' FROM ( SELECT a.id, a.edit_teacher, a.project, a.create_time, a.score FROM score a ORDER BY a.id DESC ) b GROUP BY b.project
查詢結(jié)果:
我們發(fā)現(xiàn)數(shù)據(jù)并不是我們想要的結(jié)果,子查詢里面的排序失效了
網(wǎng)上查找各種資料發(fā)現(xiàn)
子查詢生成的臨時(shí)表(派生表derived table
)中使用order by
且使其生效,必須滿足三個(gè)條件:
1、外部查詢禁止分組或者聚合
2、外部查詢未指定having,HAVING, order by
3、外部查詢將派生表或者視圖作為from
句中唯一指定源
顯然我們沒(méi)有滿足,那么如何解決order by失效呢?
我們外部表使用了group by
,那么臨時(shí)表將不會(huì)執(zhí)行filesort
操作(即order by會(huì)被忽略),所以我們可以在臨時(shí)表中加上(distinct(a.id)
)。
SELECT *, count( project ) '考試次數(shù)' , max(create_time) '最新數(shù)據(jù)時(shí)間' FROM ( SELECT DISTINCT a.id, a.edit_teacher, a.project, a.create_time, a.score FROM score a ORDER BY a.id DESC ) b GROUP BY b.project
執(zhí)行結(jié)果:
結(jié)果正確。
總結(jié)
到此這篇關(guān)于mysql如何取分組之后最新的數(shù)據(jù)的文章就介紹到這了,更多相關(guān)mysql取分組最新數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中SQL分頁(yè)查詢的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn)
這篇文章主要介紹了MySQL中SQL分頁(yè)查詢的幾種實(shí)現(xiàn)方法及優(yōu)缺點(diǎn), 分頁(yè)查詢就是在滿足條件的一堆有序數(shù)據(jù)中截取當(dāng)前所需要展示的那部分。對(duì)此感興趣的可以來(lái)了解一下2020-07-07mysql-canal-rabbitmq 安裝部署超詳細(xì)教程
這篇文章主要介紹了mysql-canal-rabbitmq 安裝部署超詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03mysql unsigned 用法及相減出現(xiàn)補(bǔ)數(shù)溢出解決方法
unsigned表示無(wú)符號(hào)的意思,也就是非負(fù)數(shù),只用于整型并且unsigned 是MYSQL自定義的類型,非標(biāo)準(zhǔn)SQL。用途1是紅苕說(shuō)的起到約束數(shù)值的作用,2是可以增加數(shù)值范圍(相當(dāng)于把負(fù)數(shù)那部分加到正數(shù)上)。不過(guò)少用,不方便移植2012-04-04linux下安裝mysql數(shù)據(jù)庫(kù)5.6源碼安裝,修改登錄用戶密碼
這篇文章主要介紹了linux下安裝mysql5.6版本并修改登錄用戶密碼的方法。2017-11-11