4

私は MySQL を初めて使用するので、あなたの助けを求める必要があります。異なる WHERE 句の値を使用して区別するユニオンの 2 つの部分で、同じテーブルから 2 セットのカウント値を選択しています。このような:

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

誰が私が間違ったことを教えてもらえますか?どうすれば希望の答えを得ることができますか? ご協力いただきありがとうございます...

4

4 に答える 4

3

これは の適切な使用例ではありませんUNIONSUMと を使用して、やろうとしていることを達成できますCASE。クエリを使用した例を次に示します。

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'
于 2012-05-14T17:09:29.280 に答える
3

ここにあなたが必要とするクエリがあります

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>

試してみる !!!

于 2012-05-14T17:30:36.633 に答える
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' 
于 2012-05-14T17:09:25.930 に答える
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' 

?

于 2012-05-14T16:57:34.383 に答える