我有两个简单的问题困扰着我(我是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部分中,这样我就可以为每个SELECT指定不同的约束?
谢谢!
发布于 2012-10-14 04:52:36
我是这样做的:
从头发颜色为空的调查中选择计数(Id)
但我不明白为什么我不能
从头发颜色为空的调查中选择计数(头发颜色)
它第一次起作用了,因为当你第一次计算ID时,X是空的,而is本身不是空的。第二次你计算的是那些本身为空的东西,而那些为空的东西的计数是0。
发布于 2012-10-14 04:53:00
至于第二个问题:
这很简单,因为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-14 05:00:55
对于第二种情况:
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如果您希望结果为单行,则需要在上面的结果上进行轴心分析。
注意:我假设字符串文字像在MsSql中一样用单引号引起来
https://stackoverflow.com/questions/12876858
复制相似问题