Mysql GROUP BY查詢每組某值最大的一條數(shù)據(jù)
Mysql GROUP BY查詢每組某值最大的一條數(shù)據(jù)
表結(jié)構(gòu)如下
需求
查詢每個(gè)學(xué)科(type)最高分(score)
想要的結(jié)果如下:
嘗試通過group by order by 查詢 sql 如下
SELECT * FROM `reports` GROUP BY type ORDER BY score DESC;
結(jié)果如下:
order by 是在最后執(zhí)行并不能查詢到想要的結(jié)果
嘗試通過group by 排序后的子查詢 sql 如下
SELECT a.* FROM ( SELECT * FROM `reports` ORDER BY score DESC) AS a GROUP BY a.type;
結(jié)果如下:
并沒有得道正確的結(jié)果
然后查詢資料看到有博客說需要在子查詢加上limit,如下sql:
SELECT a.* FROM ( SELECT * FROM `reports` ORDER BY score DESC LIMIT 10) AS a GROUP BY a.type;
結(jié)果如下:
結(jié)果是對了,但是總覺得奇怪,為什么要加 limit ,這不是我想要的
###嘗試通過聚合函數(shù)查詢,sql如下:
SELECT s.*, max( s.score ) FROM ( SELECT * FROM `reports` GROUP BY type, name ORDER BY score DESC ) s GROUP BY s.type
結(jié)果如下:
搞定max( s.score ) 亦可拿掉
Mysql group by分組后每組選取一條結(jié)果
直接說思路
- 按照某個(gè)字段進(jìn)行分組
- 選出你想要的結(jié)果
- 回表查詢
舉個(gè)栗子
需求:
查詢訂單表(id, user_id, create_time, update_time),按照user_id分組,查詢該表中,每個(gè)用戶最新的一條訂單(表中update_time最大的)
select *? from order ss, (select MAX(sa.update_time) as time, sa.user_id FROM order sa where sa.user_id is not null GROUP BY sa.user_id) aa? where ss.user_id = sa.user_id and ss.update_time = sa.time
**MAX(sa.update_time)**就是第二步,按照你的業(yè)務(wù)需求,查出你想要的結(jié)果
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql利用init-connect增加訪問審計(jì)功能的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猰ysql利用init-connect增加訪問審計(jì)功能的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03使用Dify訪問mysql數(shù)據(jù)庫詳細(xì)代碼示例
這篇文章主要介紹了使用Dify訪問mysql數(shù)據(jù)庫的相關(guān)資料,并詳細(xì)講解了如何在本地搭建數(shù)據(jù)庫訪問服務(wù),使用ngrok暴露到公網(wǎng),并創(chuàng)建知識(shí)庫、數(shù)據(jù)庫訪問工作流和智能體,需要的朋友可以參考下2025-03-03mysql 某字段插入隨機(jī)數(shù)(插入隨機(jī)數(shù)到MySQL數(shù)據(jù)庫)
這篇文章主要介紹了mysql 某字段插入隨機(jī)數(shù)(插入隨機(jī)數(shù)到MySQL數(shù)據(jù)庫),需要的朋友可以參考下2016-09-09