2016-12-03 4 views
0

私は、個々のトラックの長さに関する情報を格納する長さフィールドを持つ音楽トラックのテーブルを持っています。私は最大のトラックの長さ、最小のトラックの長さを見つけるためにデータベースに照会しようとしています、そして、私は返された長さがリストされている(IS NOT NULLである)トラックの数を求めます。ここでCOUNT関数でIS NOT NULLを使用すると正しくない結果が出る -

は声明である:

SELECT MAX(length), MIN(length), COUNT(length) 
FROM tracks WHERE length IS NOT NULL; 

問題が値COUNT()戻っている私は、最後にNULL演算子されていないか含まれているか否かを正確に同じです。テーブルには約25のエントリがありますので、NOT NULL演算子をステートメントの最後に追加するとCOUNT()の結果が低くなるはずです。

答えて

1

ドキュメントには、カウントは句は違いをすることはありません場合を含むNULL列 http://dev.mysql.com/doc/refman/5.7/en/counting-rows.html

を無視することを言います。

+0

これは正しいです。 'WHERE' *でマッチしたすべての行を数えるには、' COUNT(*) 'または' COUNT(1) 'を使用します(これは同等です)。 col1がnullでない行を数えたい場合、それはまさに 'COUNT(col1)'がする行です。 –

0

バッククォートあなたの友達です:は、MySQLの中の関数名であり、あなたがしたい場合oこのようなバッククォートでそれを置く必要があり、フィールド名としてそれを使用する:

SELECT MAX(`length`), MIN(`length`), COUNT(`length`) 
FROM tracks WHERE `length` IS NOT NULL; 
関連する問題