Как объединить запросы из той же таблицы в MySQL - PullRequest
5 голосов
/ 24 августа 2009

У меня есть два набора результатов:

SELECT name, count(appearance) as countA from table where results = '1'
SELECT name, count(appearance) as countB from table where results = '2'

И я хотел объединить их рядом, вот так:

+---------+---------+---------+
| col_1   | countA  | countB  |
+---------+---------+---------+
| John    |    3    |    1    |
| Mary    |    1    |    2    |
| Gary    |    2    |   NULL  |
| Sean    |    4    |   NULL  |
| Mike    |  NULL   |    6    |
+---------+---------+---------+

Как мне это сделать?

Ответы [ 4 ]

5 голосов
/ 24 августа 2009

Это должно сделать это (в Oracle) без необходимости самостоятельного соединения

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
1 голос
/ 24 августа 2009

Вы можете использовать самостоятельное соединение следующим образом

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'
0 голосов
/ 24 августа 2009
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;
0 голосов
/ 24 августа 2009
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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...