SQLクエリを取得し、トップ"n"の得点のリスト
-
09-06-2019 - |
質問
いに異なる方法を解決する現実の問題かった:想像してコンテスト、ゲームの中で、ユーザーに収集します。きめのクエリーのユーザの一覧に"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