亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

試著寫一下我的語句和理解,比老師的更加有可讀性,好理解

老師給出的答案可讀性實在太差了,不直觀,不符合正常邏輯,老師又不作解釋。下面是我的語句:


SELECT c.user_name, c.timestr, c.kills FROM?

(SELECT a.id, a.user_name, b.timestr, b.kills FROM user1 a INNER JOIN user_kills b on a.id = b.user_id) c?

INNER JOIN user_kills d ON c.id = d.user_id AND c.kills <= d.kills

GROUP BY c.user_name, c.timestr

HAVING COUNT(*) <= 2

ORDER BY c.user_name, c.kills DESC;




正在回答

3 回答

SELECT a.user_name, b.timestr, b.kills FROM user1 ainner join

?( select b.user_id, b.kills, max(b.timestr) as timestr from user_kills b?

? ?GROUP BY b.user_id, b.kills

?) b on a.id = b.user_id

INNER JOIN?

( select b.user_id, b.kills, max(b.timestr) as timestrfrom user_kills b?

? ?GROUP BY b.user_id, b.kills

) d?

ON a.id = d.user_id AND b.kills <= d.kills

GROUP BY b.kills?

HAVING COUNT(*) <= 2

ORDER BY a.user_name, b.kills DESC;

個人的一個修改,主要思路就是表連接之前先把重復的過濾(數據分組然后取最大的時間)


0 回復 有任何疑惑可以回復我~
#1

慕祈

如有兩條殺敵數記錄都是10,那么豬八戒最后只會查詢到殺敵數12的記錄,10記錄的count肯定大于2然后被過濾掉,所以我的思路是在連接表前過濾掉殺敵數相同的數據,取殺敵數相同的記錄日期最新的時間
2022-11-30 回復 有任何疑惑可以回復我~
#2

慕祈

有個錯誤修改一下,GROUP BY b.kills 應該改為GROUP BY a.id, b.kills
2022-11-30 回復 有任何疑惑可以回復我~

可以把子查詢 c?去掉 ,改成兩次 inner join。

1 回復 有任何疑惑可以回復我~

1.括號中的子查詢連接兩張表,很好理解。

2.子查詢得到的集合再去連接user_kills表,條件c.id = d.user_id,很好理解。

條件c.kills <= d.kills的作用,使得殺怪最多的天數只出現一次,第二多的天數出現兩次,如此類推。

重復出現的次數,其實就等于殺怪數的排名。放兩個圖,不懂的人結合圖細細品一下。

http://img1.sycdn.imooc.com//5e17bf7700015b0304280396.jpg

http://img1.sycdn.imooc.com//5e17bf770001b53d03130494.jpg

3.GROUP BY c.user_name, c.timestr分組。GROUP BY有去除重復的作用,此時的表:

http://img1.sycdn.imooc.com//5e17bf900001923f03130228.jpg

4.HAVING COUNT(*) <= 2,把重復出現次數小于等于2的保留,也就是殺怪最多的兩天。

有人可能會卡在這一步,覺得不好理解??梢越Y合第二步來看,雖然分組后看不到重復,但是通過函數可以計算出來。

再放個圖(沒加HAVING COUNT(*) <= 2的時候,而且增加count列,方便理解),還不懂就沒救了。

http://img1.sycdn.imooc.com//5e17bfb100019e2504010232.jpg

5.ORDER BY c.user_name, c.kills DESC,排序就不用解釋了吧。

5 回復 有任何疑惑可以回復我~
#1

慕祈

那如果有兩日的殺敵數相同,這個count的計數就不成立了
2022-11-30 回復 有任何疑惑可以回復我~
#2

慕祈

如有兩條殺敵數記錄都是10,那么豬八戒最后只會查詢到殺敵數12的記錄,10記錄的count肯定大于2然后被過濾掉
2022-11-30 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

試著寫一下我的語句和理解,比老師的更加有可讀性,好理解

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號