1

usersという名前のテーブルが1つあります。このテーブルには、creditsという名前の列が1つあります(一意ではありません)。今、私はユーザーのクレジットに応じて2番目に高いユーザーが欲しいです。クレジットフィールドが一意の場合、以下のクエリは正常に機能しています

SELECT * FROM users ORDER BY credits DESC LIMIT 1 , 1

しかし、ユーザーのクレジットが一意でない場合は、データを取得するための問題が発生すると思います。

mack has 200 credits
jack has 200 credits
rock has 150 credits

私がこのタイプのレコードを持っているとき、このクエリの出力で、私はロックレコードがジャックではないことを望みます

誰かが正しい値を見つけるのを手伝ってくれますか?

前もって感謝します

4

3 に答える 3

1

これがお役に立てば幸いです(最初に取得してから、上から選択したものsecond highest creditsを見つけてください`。これにより、 2番目に高いクレジットを持つ1人のユーザーusers having those that credit andが取得されます):

     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1,1)
     LIMIT 1;

編集:同じスコアを持つユーザー内でも選択したい場合は、適切なフィルター/並べ替え条件を使用します。たとえば、とrockの間rockで選択するjenni場合は、名前に基づいて別の順序を設定できます(名前が名前を持つ列であると想定)

     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1,1)
     ORDER name desc 
     LIMIT 1;

rockとの両方を取得jenniするには、最後から制限を削除し、内側の制限を更新します。例:

     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1, 1);
于 2012-11-16T05:28:01.170 に答える
1
SELECT  a.*
FROM    users a
        INNER JOIN
        (
            SELECT DISTINCT credits
            FROM users
            ORDER BY credits desc
            LIMIT 1,1
        ) b ON a.credits = b.credits
于 2012-11-16T05:30:22.687 に答える
0

これを試して

Select * FROM users 
Where Credits < (Select Max(Credits) From Users)
ORDER BY credits DESC LIMIT 1;
于 2012-11-16T05:31:08.637 に答える