Reputation: 1260
I have two sets of results:
SELECT name, count(appearance) as countA from table where results = '1'
SELECT name, count(appearance) as countB from table where results = '2'
And I wanted to combine them side by side, like this:
+---------+---------+---------+
| col_1 | countA | countB |
+---------+---------+---------+
| John | 3 | 1 |
| Mary | 1 | 2 |
| Gary | 2 | NULL |
| Sean | 4 | NULL |
| Mike | NULL | 6 |
+---------+---------+---------+
How do I do that?
Upvotes: 5
Views: 8272
Reputation: 1510
This should do it (in Oracle) without needing a self join
SELECT name
, sum( case results when '1' then 1 else 0 end ) as countA
, sum( case results when '2' then 1 else 0 end ) as countB
from table
where results IN ( '1', '2' )
group by
name
Upvotes: 5
Reputation: 57658
SELECT `table`.name, countA, countB
FROM tab
LEFT OUTER JOIN
(SELECT name, count(appearance) as countA from `table` where result = '1' group by name) as tmp1
ON `table`.name = tmp1.name
LEFT OUTER JOIN
(SELECT name, count(appearance) as countB from `table` where result = '2' group by name) as tmp2
ON `table`.name = tmp2.name;
Upvotes: -1
Reputation: 13056
You could use a self join as follows
select a.col_1, a.countA, b.countB from table a, table b
where a.col_1 = b.col_1 and a.results='1' and b.results='2'
Upvotes: 1
Reputation: 2784
SELECT name, count(appearance) as countA, null AS countB from table where results = '1'
UNION ALL
SELECT name, null AS countA, count(appearance) as countB from table where results = '2'
Upvotes: -1