1

次のコードを自分で実装しようとしています。

これが私が実装しようとしているコードです。引き分けでランクを取得するためのもので、引き分けの後はランクが連続しません。

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)
4

0 に答える 0