質問

いに異なる方法を解決する現実の問題かった:想像してコンテスト、ゲームの中で、ユーザーに収集します。きめのクエリーのユーザの一覧に"n"スコアを示しています。

ったほうがいいと思うよ例の解明.ということか、そのユーザーにテーブルのポイント:

UserId - Points
1      - 100
2      -  75
3      -  50
4      -  50
5      -  50
6      -  25

したい場合はトップ3得点、その成果:

UserId - Points
1      - 100
2      -  75
3      -  50
4      -  50
5      -  50

この実現には、表示または保存されている手続きのことをお勧めしています。私の目標dbは、Sqlサーバーです。よって解決すると思いがあって、いろいろな方法で取得結果は---早く又はより効率よ。

役に立ちましたか?

解決

未審査をもとに作

select * from users where points in
(select distinct top 3 points from users order by points desc)

他のヒント

こちらはるか分からない場合での効率化、SQL Server2005+

with scores as (
    select 1 userid, 100 points
    union select 2, 75
    union select 3, 50
    union select 4, 50
    union select 5, 50
    union select 6, 25
),
results as (
    select userid, points, RANK() over (order by points desc) as ranking 
    from scores
)
select userid, points, ranking
from results
where ranking <= 3

明らかに、最初に""が設定値、テストできます。第、最終選択してそのままで悪化する可能性がある、との"結果として..."だったの照会に対して既存のテーブル。

ど:

select top 3 with ties points 
from scores
order by points desc

だ"との関係"作品もその他のSQLサーバーです。

SQL Server2005年までとすることができますが、"トップ"数値をintとしてパラメータ:

select top (@n) with ties points 
from scores
order by points desc

実際には、変更の場を活用し、内部に入ります。

SELECT 
   userid, points 
FROM users u
INNER JOIN 
(
   SELECT DISTINCT TOP N 
      points 
   FROM users 
   ORDER BY points DESC
) AS p ON p.points = u.points

@bosnicならないと思います仕事として依頼してしまったことを知MS SQLでは期待したい戻す3行を無視すること3ユーザーに結び付けられて3です。

のようなことは:

select userid, points 
   from scores 
   where points in (select top 3 points 
                       from scores 
                       order by points desc) 
   order by points desc

@Rob#37760:

select top N points from users order by points desc

このクエリーのみを選択3列である場合は、Nは3を参照の問題をもたらしていました。"トップ3"を返します5行った。

@エスポーの現実をチェックインを追加したサブを選択し修正しました。

私の最も簡単な応答は:

select userid, points from users
where points in (select distinct top N points from users order by points desc) 

だけ保存されている論文集するNパラメータとして、まずいのSQL変動し、実行しないという事での連続トリック:

declare @SQL nvarchar(2000)
set @SQL = "select userID, points from users "
set @SQL = @SQL + " where points in (select distinct top " + @N
set @SQL = @SQL + " points from users order by points desc)"

execute @SQL

または

SELECT  UserID, Points
FROM     (SELECT  ROW_NUMBER() OVER (ORDER BY points DESC)
         AS Row, UserID, Points FROM Users)
        AS usersWithPoints
WHERE  Row between 0 and @N

例えSQLサーバーかしていこうと思います。

@マット-ハミルトン

お答えの例では、上記がない場合、そのデータセット100, 75, 75, 50, 50 (い戻しのみ3行).トップとの関係のみが含まれの関係の最後の行を返...

るつぼっ算SQL2005年にはオプション)。

こんにちはからの回答のビット長は、非効率 私の答えすることはできない。

select * from users order by points desc limit 0,5

このラーニングによるトップ5つのポイント

してみてください

select top N points from users order by points desc
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top