2011-06-23 22 views
1

すでにGROUP BYが適用されているレコードセットのレコード数をSQLでカウントする方法はありますか?SQLでGROUP BYを実行した後のレコード数の計算

私は、一連のゲームのすべてのユーザーに対して、毎週の勝利、ネクタイ、ロスの一覧を含むテーブルを持っています。これは次のように見えます。

userid weekid wins losses ties 
1  1  10 5  2 
1  2  11 3  3 
1  3  8  9  0 
2  1  11 6  0 
2  2  7  9  1 
2  3  9  7  1 
3  1  3  14  0 
3  2  7  9  1 
3  3  6  9  2 

特定のユーザーのランクを決定したいと考えています。私は、そのユーザーよりも勝利、絆、損失の組み合わせが良いユーザーの数を数えることでこれを行います。私は、例えば、ユーザ#3のランクを決定したい場合は、私はこのクエリを使用することができますが、それは半分しか方法が私を取得します。

SELECT COUNT(userid) 
FROM scores 
GROUP BY userid 
HAVING (SUM(wins) * 2) + SUM(ties) > 35 

結果は次のようになります。

COUNT(userid) 
3 
3 

これが私に与えてくれるのは、2つのレコード(3番目のランクを意味する)を含むレコードセットです。私が本当に好きなのは、レコードそのものではなく、レコードの数だけです(2)。私が考えることができるのは、レコードセットを一時テーブルにダンプし、そこにCOUNT()を実行することですが、それはかなり高価です。または、データセットをC#に渡してそこにレコード数を渡すこともできますが、指定されたユーザーがひどいレコードを持っていると、送信する必要があるレコード数が非常に大きくなります。

これを行うには比較的安価な方法があると私は願っています。

答えて

3
SELECT COUNT(*) 
FROM 
(
    SELECT (SUM(wins) * 2) + SUM(ties) as Rank 
    FROM scores 
    GROUP BY userid 
) tt 
WHERE Rank > 35 
+0

魅力的な作品です!ありがとうございました! – Andrew

関連する問題