首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:填充字段的百分比

问MySQL:填充字段的百分比
EN

Stack Overflow用户
提问于 2016-09-20 00:00:19
回答 2查看 293关注 0票数 0

我有下面的MySQL表user。

代码语言:javascript
复制
Name | Phone | City
---------------------
Mike | 154   | London
NULL | 659   | Paris
Matt | NULL  | NULL
NULL | NULL  | NULL
Marc | 514   | NULL

预期结果:

代码语言:javascript
复制
COUNT of 3/3 not NULL | COUNT of 2/3 not NULL | COUNT of 1/3 not NULL
---------------------------------------------------------------------
1                     | 2                     | 1

我想知道有多少用户完成了他的个人资料100%,66%,33%,0%。

什么查询可以给出这样的结果?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-20 00:06:07

您可以对此使用条件聚合:

代码语言:javascript
复制
Select  Sum(Case When TotalNotNull = 3 Then 1 Else 0 End) As `Count of 3/3 not NULL`,
        Sum(Case When TotalNotNull = 2 Then 1 Else 0 End) As `Count of 2/3 not NULL`,
        Sum(Case When TotalNotNull = 1 Then 1 Else 0 End) As `Count of 1/3 not NULL`,
        Sum(Case When TotalNotNull = 0 Then 1 Else 0 End) As `Count of 0/3 not NULL`
From
(
    Select  Case When Name  Is Not Null Then 1 Else 0 End 
        +   Case When Phone Is Not Null Then 1 Else 0 End
        +   Case When City  Is Not Null Then 1 Else 0 End
            As TotalNotNull
    From    `User`
) As A
票数 2
EN

Stack Overflow用户

发布于 2016-09-20 00:06:14

嗯..。

代码语言:javascript
复制
select ((Name is not null) + (Phone is not null) + (City is not null)) as numNotNull
from user
group by numNotNull;

这会将信息放在单独的行中,而不是放在一行中,但这似乎很有用。

如果您想将其列起来:

代码语言:javascript
复制
select sum(3 = (Name is not null) + (Phone is not null) + (City is not null)) as 'COUNT of 3/3 not NULL',
       sum(2 = (Name is not null) + (Phone is not null) + (City is not null)) as 'COUNT of 2/3 not NULL',
       sum(1 = (Name is not null) + (Phone is not null) + (City is not null)) as 'COUNT of 1/3 not NULL'
from user;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39577372

复制
相关文章

相似问题

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