遇到了隨便記錄一下MySQL用戶變量的使用

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的分組排序和變量賦值順序

參考:Mysql 語句執行順序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章