次のコードを自分で実装しようとしています。
これが私が実装しようとしているコードです。引き分けでランクを取得するためのもので、引き分けの後はランクが連続しません。
SET @rnk=0;
SET @rank=0;
SET @curscore=0;
SELECT score,ID,rank FROM (
SELECT AA.*,BB.ID,
(@rnk:=@rnk+1) rnk,
(@rank:=IF(@curscore=score,@rank,@rnk)) rank,
(@curscore:=score) newscore
FROM (
SELECT * FROM (
SELECT COUNT(1) scorecount,score
FROM scores GROUP BY score
) AAA
ORDER BY score DESC
) AA LEFT JOIN scores BB USING (score)
) A;
これは、コードを取得した場所へのリンクです。2つ目の回答です。
https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table
私のコードは以下です。「スコア」を「totalPoints」に置き換えました。これは私が得た限りです。
コードの 2 つの部分で問題が発生しています。
この行、BB.ID 部分。
SELECT AA.*, BB.ID,
そしてこのライン。
) AA LEFT JOIN scores BB USING (score)
コードが何をしているのかはわかっていますが、それらの部分をコードやテーブルに置き換えて機能させる方法がわかりません。
SET @rnk=0;
SET @rank=0;
SET @curscore=0;
SELECT AA.*, BB.ID,
(@rnk:=@rnk+1) rnk,
(@rank:=IF(@curscore=totalPoints,@rank,@rnk)) rank,
(@curscore:=totalPoints) newPoints
FROM (
SELECT * FROM (
SELECT COUNT(1) scorecount, totalPoints FROM (
#----------start of my code
SELECT *, (totalWins+(totalPushs*.5)) AS totalPoints, totalWins+totalLost+totalPushs AS totalBets FROM (
SELECT *, SUM(win) AS totalWins, SUM(lost) AS totalLost, SUM(push) AS totalPushs FROM (
SELECT *, (finalResult = 'Winner') AS win, (finalResult = 'Loser') AS lost, (finalResult = 'Push') AS push FROM (
SELECT nflp_users.userID, userName, avatar, teamColor,
IF (pickID=visitorID, visitorResult, homeResult) AS finalResult
FROM nflp_users
JOIN nflp_picks
ON nflp_users.userID = nflp_picks.userID
JOIN nflp_schedule
ON nflp_picks.gameID = nflp_schedule.gameID
) x
) x
GROUP BY userID
) x
#----------end of my code
) x GROUP BY totalPoints
) AAA
ORDER BY totalPoints DESC
) AA LEFT JOIN scores BB USING (score)