0

テーブルユーザーがいます

Name     | Poin 
================== 
user1    | 20 
user2    | 30 
user3    | 80 
user4    | 60 
user5    | 10 
user6    | 85 

そして私はSQLクエリを持っています

SELECT * 
FROM user 
ORDER BY poin

ポイントに基づくデータシーケンスのように見えます。

しかし、必要なのは次のようなデータです(たとえば、私はuser1でした)。

Position 1 : user6 - 85 point 
Position 2 : user3 - 80 point 
Position 3 : user4 - 60 point 

あなたはposition 5 : user1 - 20 point


アップデート

私はこのSQLを使用します

SELECT x.name、x.position
FROM(SELECT t.user、
            @rownum:= @rownum + 1 AS position
            FROM user t
           JOIN(SELECT @rownum:= 0)r
           ORDER BY t.poin DESC)x
WHERE x.user ='user1'

4

6 に答える 6

1

これにより、現在のランクがわかりuser1ます。

SELECT count(*) AS rank
FROM user
WHERE poin >= (SELECT poin FROM user WHERE name = 'user1')

このクエリの小さな問題は、別のユーザーが同じポイントを持っている場合、同じランクが割り当てられることです。それが正しいかどうかは疑わしいです。

すべてのユーザーのランクを単純に追加する場合は、次を使用します。

SELECT
    @rank:=@rank+1 AS rank,
    name,
    poin
FROM user,
    (SELECT @rank:=0) r
ORDER BY poin DESC

このクエリの小さなバリエーションを使用してシングルユーザーのランクを取得できますが、同じランクのあいまいさの問題を回避できます。

SELECT *
FROM (
    SELECT
        @rank:=@rank+1 AS rank,
        name,
        poin
    FROM user,
        (SELECT @rank:=0) r
    ORDER BY poin DESC
) x
WHERE name = 'user1'
于 2013-02-05T10:31:41.000 に答える
0

select * from user order by poin desc

お役に立てれば

于 2013-02-05T10:28:15.833 に答える
0
SELECT * FROM user ORDER BY poin DESC

BYキーワードは、ORDER指定された列で結果セットをソートするために使用されます。

キーワードはORDER BY、デフォルトでレコードを昇順で並べ替えます。

レコードを降順で並べ替える場合は、DESCキーワードを使用できます。

SQLORDERBY構文

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC
于 2013-02-05T10:28:29.750 に答える
0
SELECT  Name, 
        Poin, 
        @rowNum := @rowNum + 1 AS position
FROM    user
JOIN    (SELECT @rowNum := 0) r
ORDER BY poin;
于 2013-02-05T10:31:40.500 に答える
0

次のコード:

SELECT count(*) AS rank 
FROM user 
WHERE poin >= (SELECT poin FROM user  WHERE name = 'user1')

が異なる行にダブルポイントがある場合に問題があります。

于 2013-02-05T11:22:57.097 に答える
-1
SELECT  Name, 
        Poin, 
        @rowNum := @rowNum + 1 AS position
FROM    user
JOIN    (SELECT @rowNum := 0) r
ORDER BY poin DESC;
于 2013-02-05T10:28:34.160 に答える