1.建表語句,數據準備,參考: sql查詢每個班級的前三名
2.mysql用戶變量,mysql中用戶變量不用提前申明,在用的時候直接用“@變量名”使用就可以了,其作用域爲當前連接。
-- 第一種用法,使用set時可以用“=”或“:=”兩種賦值符號賦值
set @rownum := 0;
set @rownum = 0;
-- 第二種用法,使用select時必須用“:=”賦值符號賦值,因爲select語句中“=”是比較符號,像“>”
select @rownum := 0;
2.分析sql語句如下,
select @pre_class := null, @rownum := 0 是變量的初始化,相當於 set @pre_class := null, @rownum := 0;
if 判斷,
當class不一樣的時候,rounum重新初始化爲1 。
SELECT class, score, name,
@rownum := if(@pre_class = class, @rownum + 1, 1) rownum,
@pre_class := class
FROM test_score,(select @pre_class := null, @rownum := 0) temp
order by class asc, score desc
3.查詢結果如下,先按班級分組,再按分數排序,分別標記rownum值,此時rownum值已經從大到小被排序標記。
4.這個時候查詢,每個班級的前三名,只要取rownum小於4的數據即可,sql如下,
select *
from (SELECT class, score, name,
@rownum := if(@pre_class = class, @rownum + 1, 1) rownum,
@pre_class := class
FROM test_score,
(select @pre_class := null, @rownum := 0) temp
order by class asc, score desc) T
where rownum < 4
5.注意變量賦值的順序,
sql執行順序
(01) from
(03) join
(02) on
(04) where
(05) group by(開始使用select中的別名,後面的語句中都可以使用)
(06) avg,sum....
(07) having
(08) select
(09) distinct
(10) order by
參考:MySQL變量的使用
參考:Mysql 語句執行順序