欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql5.7使用變量進(jìn)行分組排名并實(shí)現(xiàn)篩選

 更新時(shí)間:2024年05月01日 09:12:16   作者:好大的月亮  
這篇文章主要介紹了mysql5.7使用變量進(jìn)行分組排名并實(shí)現(xiàn)篩選方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

概述

mysql到8.0之后就有rank和desc_rank函數(shù)了,但是在5.7沒(méi)這玩意,想實(shí)現(xiàn)一個(gè)分組排名得靠自己手?jǐn)]了.

分組排名

student表就id/姓名/分?jǐn)?shù)/班級(jí)幾個(gè)字段,加上class表就id/name兩個(gè)字段。

需求是查詢每個(gè)班級(jí)分?jǐn)?shù)排名前三的所有人(不是3個(gè)人是所有人)

SELECT
@last_class := st.class,
CASE
		
	WHEN
		st.class = @last_class THEN
		CASE
				
				WHEN @score = st.score THEN
				@rank 
				WHEN ( @score := st.score ) IS NOT NULL THEN
				@rank := @rank + 1 
			END 
	ELSE @rank := 1 
END rank,
st.* 
FROM
	student st,(
	SELECT
		@score := NULL,
		@rank := 0,
		@last_class := NULL 
	) a 
ORDER BY
	st.class,
	st.score desc

結(jié)果

篩選

#EXPLAIN
SELECT
	a.id AS studentId,
	NAME,
	a.class,
	a.score 
FROM
	(
	SELECT
	@last_class := st.class,
	CASE
			
		WHEN
			st.class = @last_class THEN
				CASE
					
					WHEN @score = st.score THEN
					@rank 
					WHEN ( @score := st.score ) IS NOT NULL THEN
					@rank := @rank + 1 
					
				END 
		ELSE @rank := 1 
	END rank,
	st.* 
FROM
	student st,(
	SELECT
		@score := NULL,
		@rank := 0,
		@last_class := NULL 
	) aa 
ORDER BY
	st.class,
	st.score DESC 
	) a
	
	where a.rank <= 3

結(jié)果

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論