您好,登錄后才能下訂單哦!
本篇內容主要講解“mysql怎么取分組之后最新的數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“mysql怎么取分組之后最新的數(shù)據(jù)”吧!
統(tǒng)計每門課的考試次數(shù)、最新一次考試的時間、最新一次考試的錄入成績的老師
#考試次數(shù)統(tǒng)計 select project '科目',count(project) '考試次數(shù)' from score a group by project
查詢結果:
#考試次數(shù)統(tǒng)計 最新一次考試的時間 select project '科目',count(project) '考試次數(shù)' ,max(create_time) from score a group by project
查詢結果:
當我們分組去查詢最新的錄入成績的老師或者分組查詢最新一次各科的成績時確發(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ù)時間' FROM score a GROUP BY a.project
查詢結果:
但是很顯然我們需要查詢的數(shù)據(jù)id應該是4、8、12
可以看出分組聚合的時候默認查詢的是分組之后的第一條數(shù)據(jù),那么我們想要查詢最新的數(shù)據(jù)需要新對我們的數(shù)據(jù)進行排序
SELECT *, count( project ) '考試次數(shù)', max(create_time) '最新數(shù)據(jù)時間' 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
查詢結果:
我們發(fā)現(xiàn)數(shù)據(jù)并不是我們想要的結果,子查詢里面的排序失效了
網(wǎng)上查找各種資料發(fā)現(xiàn)
子查詢生成的臨時表(派生表derived table
)中使用order by
且使其生效,必須滿足三個條件:
1、外部查詢禁止分組或者聚合
2、外部查詢未指定having,HAVING, order by
3、外部查詢將派生表或者視圖作為from
句中唯一指定源
顯然我們沒有滿足,那么如何解決order by失效呢?
我們外部表使用了group by
,那么臨時表將不會執(zhí)行filesort
操作(即order by會被忽略),所以我們可以在臨時表中加上(distinct(a.id)
)。
SELECT *, count( project ) '考試次數(shù)' , max(create_time) '最新數(shù)據(jù)時間' 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í)行結果:
結果正確。
到此,相信大家對“mysql怎么取分組之后最新的數(shù)據(jù)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。