溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql怎么取分組之后最新的數(shù)據(jù)

發(fā)布時間:2022-06-09 09:37:25 來源:億速云 閱讀:161 作者:iii 欄目:開發(fā)技術

本篇內容主要講解“mysql怎么取分組之后最新的數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“mysql怎么取分組之后最新的數(shù)據(jù)”吧!

    一、數(shù)據(jù)表設計

    mysql怎么取分組之后最新的數(shù)據(jù)

    二、查詢場景 

    統(tǒng)計每門課的考試次數(shù)、最新一次考試的時間、最新一次考試的錄入成績的老師

    1、統(tǒng)計沒門課的考試次數(shù)

    #考試次數(shù)統(tǒng)計
    select project '科目',count(project) '考試次數(shù)' from score a group by project

    查詢結果:

    mysql怎么取分組之后最新的數(shù)據(jù)

     2、最新一次考試的時間

    #考試次數(shù)統(tǒng)計	最新一次考試的時間
    select project '科目',count(project) '考試次數(shù)' ,max(create_time) from score a group by project

    查詢結果:

    mysql怎么取分組之后最新的數(shù)據(jù)

     3、分組統(tǒng)計最新的錄入成績的老師

    當我們分組去查詢最新的錄入成績的老師或者分組查詢最新一次各科的成績時確發(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

    查詢結果:

    mysql怎么取分組之后最新的數(shù)據(jù)

    但是很顯然我們需要查詢的數(shù)據(jù)id應該是4、8、12

    mysql怎么取分組之后最新的數(shù)據(jù)

     可以看出分組聚合的時候默認查詢的是分組之后的第一條數(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

    查詢結果:

    mysql怎么取分組之后最新的數(shù)據(jù)

    我們發(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ù)

     結果正確。

    到此,相信大家對“mysql怎么取分組之后最新的數(shù)據(jù)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

    AI