select user_id,count(1) from t1 group by user_id order by count(1) desc limit 5;
select * from t2 where user_id in( select user_id from t1 group by user_id order by count(1) desc limit 5);可是展現的T2結果雖然取出來了,但並無排序,沒有達到效果
select t2.user_id,t2.user_name,count(1) as num from t1,t2 where t1.user_id = t2.user_id group by t2.user_id,t2.user_name order by num desc limit 5;2.用with來構造:
with tmp as( select user_id,count(1) as num from t1 group by user_id order by num desc limit 5 ) select t2.*,tmp.num from t2 inner join tmp on t2.user_id = tmp.user_id order by tmp.num desc
分析:
第一種辦法須要兩張表關聯再分組取前5條,執行計劃以下:
若是數據量比較大,尤爲是T2表很大的時候,會消耗比較多的資源,另外若是想取用戶表裏有其餘的字段,也須要進行分組
第二種辦法是採用with來構造臨時表,而後再去與T2表關聯取數,執行計劃以下:
能夠看到消耗的資源相對少一點,測試中發現T二、T1表很大的時候,這種差距尤爲明顯。 數據庫