我想制作一个像下面这样的表
| 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),但它不显示我想要的结果。
干杯
答案 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个兄弟姐妹会怎么样?)。如果您将数据存储在包含id
和sibling
列的表格中,那么此查询将非常简单:
select id,count(sibling)
from table
group by id;