计算没有Null值的列数

时间:2012-03-08 00:08:17

标签: sql

我想制作一个像下面这样的表

| ID | Sibling1 |   Sibling2 |   Sibling 3  | Total_Siblings |
______________________________________________________________
| 1  |  Tom     |    Lisa    |    Null      |       2        | 
______________________________________________________________
| 2  |  Bart    |    Jason   |    Nelson    |       3        |
______________________________________________________________
| 3  |  George  |    Null    |    Null      |       1        |
______________________________________________________________
| 4  |  Null    |    Null    |    Null      |       0        |

对于Sibling1,Sibling2,Sibling3:它们都是nvarchar(50)(不能根据要求更改它)。

我担心的是如何计算Total_Siblings的值,以便使用SQL显示上述兄弟姐妹的数量?我试图使用(Sibling1 + Sibling 2),但它不显示我想要的结果。

干杯

2 个答案:

答案 0 :(得分:1)

像这样的查询可以解决问题。

SELECT ID,Sibling1,Sibling2,Sibling3
,COUNT(Sibling1)+Count(Sibling2)+Count(Sibling3) AS Total
FROM MyTable
GROUP BY ID

这里可能需要一点解释。使用字段名称计数将计算非空值的数量。由于您按ID分组,它只会返回0或1.现在,如果您使用的是MySQL以外的任何内容,则必须替换

GROUP BY ID

有关

GROUP BY ID,Sibling1,Sibling2,Sibling3

因为大多数其他数据库要求您在GROUP BY部分中指定所有不包含聚合函数的列。

另外,您可以考虑更改数据库架构以将兄弟姐妹存储在另一个表中,以便每个人都可以拥有任意数量的兄弟姐妹。

答案 1 :(得分:0)

您可以通过添加个人count

来完成此操作
select id,sibling1,sibling2,sibling3
,count(sibling1)+count(sibling2)+count(sibling3) as total_siblings
from table
group by 1,2,3,4;

但是,你的表格结构会使这个规模变得很糟糕(如果id可以属于50个兄弟姐妹会怎么样?)。如果您将数据存储在包含idsibling列的表格中,那么此查询将非常简单:

select id,count(sibling)
from table
group by id;