2009-08-24 10 views
4

ich zwei Sätze von Ergebnissen haben:Wie union-Abfragen aus derselben Tabelle in MySQL

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

Und ich wollte, dass sie nebeneinander kombinieren, wie folgt aus:

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

Wie kann ich TU das?

Antwort

4

Dies sollte es tun (in Oracle) ohne eine Selbst benötigen beitreten

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 
+0

Es funktioniert auch in MySql. –

+0

Ja, das ist was ich suche. Danke^_ ^ – Khairul

-1
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' 
1

Sie ein selbst verwenden könnte kommen wie folgt

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

Die OP will alle aufzulisten 'col_1' und setzen NULL in die 'count'-Spalte ohne übereinstimmende Datensätze. –

-1
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; 
Verwandte Themen