2009-08-13 11 views
4

のは、私は私がmysqlのクエリではnullとnullでなく、両方リスト

NAME | null | not null 
foo1 | 0 | 2 
foo2 | 2 | 0 
foo3 | 0 | 1 
を言うことができるように、1つのクエリでNULL NULLのすべてのインスタンスをカウントしないでしたいのですが、テーブル

NAME | ID | REF 
foo1 | 1 | NULL 
foo2 | 2 | 1234 
foo2 | 3 | 567 
foo1 | 4 | NULL 
foo3 | 5 | 89 

を持っているとしましょう

私は、これらの2つのクエリ

select NAME,count(*) from TABLE where REF is not null 
select NAME,count(*) from TABLE where REF is null 

を実行することができますしかし、私は1つのmysqlのクエリでそれを行うための簡単な方法がなければならないと確信しています。

答えて

10

あなたは(1)(*)COUNTすることと等価である。この

select NAME, sum(isnull(REF)) as is_null, sum(not isnull(REF)) as is_not_null from TABLE group by NAME; 

SUMのようにISNULLにSUMを()()を使用することができますので、それは本当に、カウントを行います。

1

それはあなたをグループ化使用するソリューションでOKの場合のような何か試すことができます。

SELECT ISNULL(ref),COUNT(*) FROM TABLE GROUP BY ISNULL(ref) 

を、少なくともそれはどのように多くの行あなたが持っている、REFにNULLを持つかを示します。 個々の名前をすべて選択する必要がある場合は、NAMEのGROUP_CONCATを選択して、このソリューション(良いかどうか)を拡張できます。

0

私はMySQLはIF()関数を持っていると思うので、あなたが書くことができる:

SELECT Name, SUM(IF(ISNULL(Ref), 1, 0)) AS NullCount, 
     SUM(IF(ISNULL(Ref), 0, 1)) AS NotNullCount 
FROM Table GROUP BY Name 

だから、あなたがゼロか、各行に1つのいずれかを生成するために、IF()関数を使用している、とそれらを合計して「1」の総数を得る。

関連する問題