3

私を困惑させている2つの簡単な質問があります(私はMysqlが初めてです)

UserID (プライマリ)、SkinColor、HairColor の 3 つの列を持つテーブル (調査) があります。髪の色が null である (アンケートに回答しなかった) 人の数を数えたかったのです。

私はこれをしました:

select count(id)
from survey
where haircolor is null

でもどうして出来ないのか不思議だった

select count(haircolor)
from survey
where haircolor is null

0 を返しました。これはなぜですか?

質問 2: 調査回答者の総数 (すべての ID)、髪の色が null 値、肌の色が null 値の人数を返したいです。このクエリを試しました

select count(id), count(skincolor), count(haircolor)
from survey
where skincolor is null and haircolor is null

しかし、それはスキンカラーとヘアカラーの両方が明らかにヌルであるカウントを返しただけであり、各列の個々のカウントではありません。WHERE 制約を SELECT セクションに配置して、選択ごとに異なる制約を指定できるようにする方法はありますか?

ありがとう!

4

3 に答える 3

2

私はこれをしました:

ヘアカラーが null の調査から count(id) を選択

でもどうして出来ないのか不思議だった

ヘアカラーが null の調査からカウント (ヘアカラー) を選択

XがnullでIS自体がnullではないIDを初めてカウントしているため、初めて機能しました。2 回目は、それ自体が NULL のものを数えており、NULL のものの COUNT は 0 です。

于 2012-10-13T20:52:36.093 に答える
0

質問2について:

COUNT(null) が 0 であるため、これは簡単です。

 select count(id), count(skincolor), count(haircolor) from survey

これにより、各列の null 以外の数が得られます。

次の行に沿って何かを行うこともできるはずです。

SELECT count(1) AS num, 
       count(1)-count(skincolor) AS nullcolor, 
       count(1)-count(haircolor) AS nullhair 
    FROM survey
于 2012-10-13T20:53:00.157 に答える
0

2 番目のケース:

select 'No haircolor', count(id)
from survey
where haircolor is null
union all 
select 'no skincolor',count(id)
from survey
where skincolor is null

これは次のようなものを返すはずです:

No haircolor   3
No skincolor   1

結果を 1 行で表示する場合は、上記の結果に対してピボットを実行する必要があります。

注: 文字列リテラルは、MsSql のように一重引用符で囲まれていると想定しています

于 2012-10-13T21:00:54.907 に答える