首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的NULL计数在MySQL中返回0?非常基础

为什么我的NULL计数在MySQL中返回0?非常基础
EN

Stack Overflow用户
提问于 2012-10-14 04:48:13
回答 3查看 115关注 0票数 3

我有两个简单的问题困扰着我(我是Mysql的新手)

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

我是这样做的:

代码语言:javascript
复制
select count(id)
from survey
where haircolor is null

但我不明白为什么我不能

代码语言:javascript
复制
select count(haircolor)
from survey
where haircolor is null

它返回0。为什么会这样呢?

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

代码语言:javascript
复制
select count(id), count(skincolor), count(haircolor)
from survey
where skincolor is null and haircolor is null

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

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-10-14 04:52:36

我是这样做的:

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

但我不明白为什么我不能

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

它第一次起作用了,因为当你第一次计算ID时,X是空的,而is本身不是空的。第二次你计算的是那些本身为空的东西,而那些为空的东西的计数是0。

票数 2
EN

Stack Overflow用户

发布于 2012-10-14 04:53:00

至于第二个问题:

这很简单,因为COUNT(null)是0:

代码语言:javascript
复制
 select count(id), count(skincolor), count(haircolor) from survey

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

您还应该能够做一些类似以下内容的事情:

代码语言:javascript
复制
SELECT count(1) AS num, 
       count(1)-count(skincolor) AS nullcolor, 
       count(1)-count(haircolor) AS nullhair 
    FROM survey
票数 0
EN

Stack Overflow用户

发布于 2012-10-14 05:00:55

对于第二种情况:

代码语言:javascript
复制
select 'No haircolor', count(id)
from survey
where haircolor is null
union all 
select 'no skincolor',count(id)
from survey
where skincolor is null

这应该返回类似如下的内容:

代码语言:javascript
复制
No haircolor   3
No skincolor   1

如果您希望结果为单行,则需要在上面的结果上进行轴心分析。

注意:我假设字符串文字像在MsSql中一样用单引号引起来

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12876858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档