Reputation: 33
With this data
Team Name Won
X Andy 1
X Cara 1
X Cara 1
X Eric 0
X Eric 0
X Eric 0
X Eric 0
Y Bill 0
Y Dave 0
Y Dave 1
Y Dave 1
I want for each team the number of players and the number of winners
Team Players Winners
X 3 2
Y 2 1
Does it in two queries:
select team, count(distinct Name) as Players from test group by team
select team, count(distinct Name) as Winners from test where Won=1 group by team
but I can't work out the syntax to do it in one. TIA for your help. John
Upvotes: 3
Views: 54
Reputation: 28236
Try this:
select team, count(distinct Name) as Players, sum(won) Winners
from (select distinct * from test) tst
group by team
You can test it here: http://rextester.com/QATLK24197
Upvotes: 1
Reputation: 2159
you can do it by group by
select team,count(name) as players ,sum(won) winners from ( select team, Name,sum(distinct won) as won from test group by team,name ) group by team
Upvotes: 1
Reputation: 39527
You can do conditional aggregation using case
:
select team,
count(distinct name) as Players,
count(distinct case when won = 1 then name end) as winners
from test
group by team
Upvotes: 3