web-dev-qa-db-ja.com

MySQLでNULL値をカウントする方法は?

MySQLデータベースでNULLのすべての値を見つける方法を知りたいのですが、たとえば、まだ平均を持っていないすべてのユーザーを表示しようとしています。

これがMySQLコードです。

SELECT COUNT(average) as num
FROM users
WHERE user_id = '$user_id'
AND average IS_NULL
16
abbr
SELECT
    COUNT(*) as num
FROM
    users
WHERE
    user_id = '$user_id' AND
    average IS NULL
16
Hammerite

より一般的なバージョン(where句に依存しないため、全体的な結果が制限されます):

SELECT 
    SUM(CASE WHEN average IS NULL THEN 1 ELSE 0 END) As null_num, 
    SUM(CASE WHEN average IS NOT NULL THEN 1 ELSE 0 END) AS not_null_num
FROM users

ここで他の回答によって提示される特定のクエリよりも優れているわけではありませんが、(他の情報が必要なために)制限where句を使用することが実用的でない状況で使用できます...

33
ircmaxell

また、次のことができます。

Select Count(*) - Count(Average) as NullAverages
From Users
Where user_id = '$user_id' 
9
Charles Bretana

あなたは正しい方向に進んでいます。 'IS_NULL'から '_'を削除し、 'COUNT(average)'を 'COUNT(1)'に変更すると、それが作成されます。

MYSQLでのNULLの操作の詳細については、 http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html を参照してください。

また、IS NULLの操作については、具体的に参照してください。

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_is-null

5
Jacob

少し遅れますが、MySQL5.0.51で実行できます。

SELECT COUNT(*) AS total, COUNT(field1) AS notNullFields1
FROM table
GROUP BY field5, field6

よろしく。

3
ATorras

私はmysql固有のものが欠けているかもしれませんが、これはSQLサーバーで機能します

SELECT COUNT(*) as num
FROM users
WHERE user_id = '$user_id'
AND average IS NULL
3
µBio

これは、この問題にも使用できる1つのライナーです。

SELECT COUNT(IF(average IS NULL,1,0))
FROM table; 

それは私にとって魅力のように働きました!

2
Prozac