2012-05-14 35 views
3

我是MySQL的新手,需要請求您的幫助。 我從同一個表中選擇2組計數值,使用不同的WHERE子句值區分;像這樣:MySQL UNION - 將返回值組合成一組行

SELECT Count(column1) as 'RED', null as 'BLUE' 
FROM TableA 
Where column1 Like 'RED' 
UNION 
SELECT NULL, Count(column1) 
FROM TableA 
Where column1 Like 'BLUE' 

我希望得到:

RED  BLUE 
---  ---- 
23  55 

但我實際上得到的是:

RED  BLUE 
---  ---- 
23  NULL 
NULL  55 

誰能告訴我什麼,我做錯了,以及如何我可以得到我想要的答案嗎? 感謝您的幫助......

回答

0

你嘗試:

SELECT Count(column1) as red, null as blue 
FROM TableA Where column1 Like 'RED' 
UNION 
SELECT NULL as red, Count(column1) as blue 
FROM TableA Where column1 Like 'BLUE' 

0

試試這個SQL語句

SELECT Count(A.column1) as red, Count(B.column1) as blue FROM TableA as A, TableA as B Where A.column1 Like 'RED' AND B.column1 Like 'BLUE' 
3

這不是一個很好的使用情況UNION。您可以使用SUMCASE完成您正在嘗試執行的操作。下面是使用您的查詢的例子:

SELECT SUM(CASE WHEN column1 LIKE 'RED' THEN 1 ELSE 0 END) AS red_count, 
SUM(CASE WHEN column1 LIKE 'BLUE' THEN 1 ELSE 0 END) AS blue_count 
FROM TableA 
WHERE column1 LIKE 'RED' 
OR column1 LIKE 'BLUE' 
+0

非常感謝:-) – enCue

1

這裏是查詢,你需要

select 
    A.colorcount RED, 
    B.colorcount BLUE 
from 
    (select count(1) colorcount from tableA where column1='RED') A, 
    (select count(1) colorcount from tableA where column1='BLUE') B 
; 

這裏是樣本數據

mysql> drop database if exists encue; 
Query OK, 1 row affected (0.05 sec) 

mysql> create database encue; 
Query OK, 1 row affected (0.01 sec) 

mysql> use encue 
Database changed 
mysql> create table tableA 
    -> (
    ->  id int not null auto_increment, 
    ->  column1 varchar(20), 
    ->  primary key (id), 
    ->  key (column1) 
    ->); 
Query OK, 0 rows affected (0.13 sec) 

mysql> insert into tableA (column1) values 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('RED'),('BLUE'),('BLUE'),('BLUE'),('RED'),('BLUE'), 
    -> ('BLUE'),('BLUE'),('BLUE'),('BLUE'),('BLUE'),('BLUE'), 
    -> ('BLUE'),('BLUE'),('BLUE'),('BLUE'),('BLUE'),('RED'); 
select count(1) colorcount,column1 from tableA group by column1; 
Query OK, 78 rows affected (0.10 sec) 
Records: 78 Duplicates: 0 Warnings: 0 

mysql> select count(1) colorcount,column1 from tableA group by column1; 
+------------+---------+ 
| colorcount | column1 | 
+------------+---------+ 
|   55 | BLUE | 
|   23 | RED  | 
+------------+---------+ 
2 rows in set (0.00 sec) 

這裏是輸出你正在尋找:

mysql> select A.colorcount RED,B.colorcount BLUE from 
    -> (select count(1) colorcount from tableA where column1='RED') A, 
    -> (select count(1) colorcount from tableA where column1='BLUE') B 
    -> ; 
+-----+------+ 
| RED | BLUE | 
+-----+------+ 
| 23 | 55 | 
+-----+------+ 
1 row in set (0.00 sec) 

mysql> 

試試看!