2015-07-28 52 views
1

我一直在嘗試完成這個工會,在同一張桌子上的連接和嵌套選擇,但我不能得到我需要的結果。多個選擇與聚合在同一張桌子上

因此,要啓動:所有我需要的數據是表1,其短版的結構是這樣的:

OWNERIDVARCHAR(25)
supervisorIDVARCHAR(25 )
statusIDINT

樣品的數據是:

john.smith | joe.blogs | 1 
john.smith | joe.blogs | 1 
john.smith | joe.blogs | 1 
john.smith | joe.blogs | 2 
jane.doe | joe.blogs | 1 
jane.doe | joe.blogs | 1 
jane.doe | joe.blogs | 1 
jane.doe | joe.blogs | 1 
billy.bob | mary.jane | 1 
billy.bob | mary.jane | 2 

我希望得到什麼,以僞SQL將是:

SELECT ownerID, COUNT(*) as CountOne, COUNT(*) as CountTwo 
FROM table1 
WHERE supervisorID='joe.blogs'AND statusID=1 
OR supervisorID='joe.blogs'AND statusID=2 
GROUP BY ownerID 

產生以下結果:

userID | countOne | countTwo 
---------------------------------- 
john.smith |  3 | 1 
---------------------------------- 
jane.doe |  4 | 0 

明顯的僞SQL沒有權利工作,但正如我所說我嘗試過使用UNION,JOIN在同一張桌子上,嵌套選擇,並要求谷歌,但沒有我產生會給我所需的結果:(

數據庫正在使用PostreSQL。

+0

_PostreSql_或_PostgreSQL_? –

回答

1

你可以用它代替COUNT SUM和總結只有那些符合你需要的statusId價值觀 - 爲CountOne - >狀態= 1,對於CountTwo - >狀態= 2:

SELECT ownerId, 
     SUM(CASE WHEN statusId = 1 THEN 1 ELSE 0 END), 
     SUM(CASE WHEN statusId = 2 THEN 1 ELSE 0 END) 
FROM table1 
WHERE supervisorId = 'joe.blogs' 
GROUP BY ownerId 

希望它有幫助。

+0

太棒了!從來沒有想過使用SUM的。我試過類似COUNT而不是SUM,但第一次計數是正確的,但第二次是第一次 – Peter

0

試試這個

select ownerID , 
sum(case when statusID =1 then 1 else 0 end) as countOne, 
sum(case when statusID =2 then 1 else 0 end) as countTwo 
from table1 
group by ownerID 
相關問題