2010-12-17 86 views
4

如何創建一個查詢,如果我需要在選擇連續兩個聚合函數以及每個功能我用需要不同的組,並在條件 在我的例子,我需要返回playerName,多少如果在桌上游戲結果=第一,並且他玩過多少次,玩家贏得這個可以被檢查。如何創建此查詢

但是不知道如何處理兩個集合函數。

只是我想加入這兩個查詢的結果

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 

設定爲桌面遊戲屬性都 playerId,導致 設定爲表玩家屬性都是 playerName,playerId

任何想法???

回答

3

使用:使用WITH ROLLUP

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

然後,在客戶端

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

它運作thanx,但你能請儘可能解釋每一步,請儘量:)請先生 – Stive 2010-12-17 18:21:46

+0

,但等待一些這個錯誤,當我看到記錄它返回一些球員贏得0!不可能 – Stive 2010-12-17 18:27:40

+1

@Lenord:是的,如果玩家沒有任何遊戲的結果等於「第一」 - 值將爲零。如果要顯示該列,該列必須始終存在於輸出中 - 您期望看到什麼? – 2010-12-17 18:31:58

0

隨着由OMG小馬Bnjmn提出瞭解決方案,還可以得到想要的結果,發現與結果記錄等於「第一」和和結果爲空(這是#games播放)。