2010-12-17 7 views
4

選択行と各関数ごとに2つの集計関数を含める必要がある場合、クエリを作成する方法私は別のグループが必要な場所と条件があります 私の例では、playerNameを返す必要がありますプレイヤーはテーブルゲーム結果の結果が最初で何回プレイされたのかを確認することができます。このクエリを作成する方法

2つの集計関数を処理する方法はわかりません。

は単に私はテーブルゲームのための属性のセットが playerId、 を発生している。この2つのクエリの結果

1.

select playeName,count(*) 
from player,game 
where player.playerId=game.playerId and result="first" 
group by game.playerId 

2.

select count(*) 
from game, player 
where game.playerId=player.playerId 
group by game.playerId 

に参加したいですテーブルプレーヤーの属性セットは、 playerName、playerId

です。

任意のアイデア???

答えて

3

用途:OMGポニーBnjmnによって提案された解決策とともに

SELECT p.playername, 
     SUM(CASE WHEN g.result = 'first' THEN 1 ELSE 0 END), 
     COUNT(*) 
    FROM PLAYER p 
    JOIN GAME g ON g.playerid = p.playerid 
GROUP BY p.playername 
+0

あなたはお世話になりますが、できるだけ多くのステップを説明してください。Mr.OMG – Stive

+0

をお願いします。しかし、何人かのプレーヤーが勝つという記録を見ると、これは間違っています。不可能 – Stive

+1

@Lenord:はい、プレイヤーが結果が "first"に等しいゲームがない場合、値はゼロになります。あなたが見たいと思えば、いつもその列が出力に存在していなければなりません - あなたは何を見たいと思っていましたか? –

0

、あなたも見つけ、クライアント側で、その後WITH ROLLUP

select result, count(*) 
from game, player 
where game.playerId=player.playerId 
group by game.playerId, result WITH ROLLUP 

を使用することによって、所望の結果を得ることができます結果が 'first'であり、結果がnullであるレコード(#ゲームが再生される)。

関連する問題