3

我有 2 个简单的问题让我感到困惑(我是 Mysql 新手)

我有一个包含 3 列的表(调查),即 UserID(主要)、SkinColor 和 HairColor。我想计算头发颜色为空的人数(他们没有回答调查)。

我这样做了:

select count(id)
from survey
where haircolor is null

但我很困惑为什么我做不到

select count(haircolor)
from survey
where haircolor is null

它返回 0。这是为什么?

问题 2:我想返回调查对象的总数(所有 ID)、头发颜色为空值和肤色为空值的人数。我试过这个查询

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

但这只是返回了 skincolor 和 haircolor 显然都为空的计数,而不是每列的单独计数。有没有办法将 WHERE 约束放在 SELECT 部分,以便我可以为每个选择指定不同的约束?

谢谢!

4

3 回答 3

2

我这样做了:

从 haircolor 为空的调查中选择 count(id)

但我很困惑为什么我做不到

从头发颜色为空的调查中选择计数(头发颜色)

它第一次起作用,因为您第一次计算 X 为空且 IS 本身不为空的 ID。第二次计算本身为 NULL 的事物,而 NULL 事物的 COUNT 为 0。

于 2012-10-13T20:52:36.093 回答
0

for the second case:

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

this should return something like:

No haircolor   3
No skincolor   1

If you want the result as a single line you'll need to do a pivot on the result above.

Note: I'm assuming String literals are quoted with single quotes as in MsSql

于 2012-10-13T21:00:54.907 回答
0

至于问题2:

这很容易,因为 COUNT(null) 为 0:

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

这为您提供了每列的非空值的数量。

您还应该能够执行以下操作:

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 回答