3

テーブルの行番号を取得しようとしています。これまでのところ、これは私の SQL プロンプトです。

SELECT @i = @i + 1 AS Rank, x.Name, x.PartyName, x.ConstituencyName, x.Votes 
FROM (
    SELECT CONCAT(t1.Firstname, ' ', t1.Lastname) AS Name, t1.PartyName, t1.ConstituencyName, COALESCE(t2.Count, 0) AS Votes
        FROM (
            (SELECT db.user.PID, db.user.Firstname, db.user.Lastname, db.party.PartyName, db.constituency.ConstituencyName 
                FROM db.user
                LEFT JOIN db.party ON db.user.PartyId = db.party.PartyID 
                LEFT JOIN db.constituency ON db.user.CID = db.constituency.CID
                WHERE db.user.PartyId IS NOT NULL
                AND db.user.CID IS NOT NULL
            ) t1
            LEFT JOIN
            (SELECT db.user.Vote, COUNT(*) AS 'Count' 
                FROM db.user 
                GROUP BY db.user.Vote
            ) t2
        ON
            t1.PID = t2.Vote
        ORDER BY t2.Count DESC)
        ) x,
(SELECT @i:=1) r

つまり、これが基本的に行うことは、最初にテーブル t1 (2 つの異なるテーブルから情報を取得する) を作成し、それをテーブル t2 と結合して、すべての候補者を総投票数で取得できるようにすることです。次に、そのテーブルを「x」としてマークし、行番号を初期化する必要があるテーブル「r」と結合しました(行番号のオンラインチュートリアルを使用しました)。ただし、この SQL プロンプトを実行すると、次のように返されます。

Rank    Name    PartyName   ConstituencyName    Votes
0       Name1   Party1      Constituency1       700
0       Name2   Party1      Constituency1       550

どんな提案でも大歓迎です。

4

1 に答える 1

3

これはユーザー変数であり、使用し:=ないでください=

SELECT @i := @i + 1 AS Rank,...
于 2013-04-04T23:19:00.650 に答える