在SQL+;计数
我有一个包含许多列和行的表,一列下有组,另一列下有人,每个组中可以有一个或多个人。我想做这样的事情(伪代码): 我来自python背景,SQL对我来说还是很新的,但我(非常有缺陷)的尝试: 表A看起来有点像这样:在SQL+;计数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含许多列和行的表,一列下有组,另一列下有人,每个组中可以有一个或多个人。我想做这样的事情(伪代码): 我来自python背景,SQL对我来说还是很新的,但我(非常有缺陷)的尝试: 表A看起来有点像这样: groups people A tom A jerry B sarah person
groups people
A tom
A jerry
B sarah
person familyMembers
tom daughter
tom son
tom wife
sarah husband
表B如下所示:
groups people
A tom
A jerry
B sarah
person familyMembers
tom daughter
tom son
tom wife
sarah husband
汤姆有三个家庭成员,萨拉只有一个
有点迷失了,洞察?现在还不清楚团队是如何参与进来的。听起来你想计算每个人的家庭成员人数,对吗?一个简单的方法是只计算表B中的家庭:
SELECT
person,
COUNT(familyMembers) AS count_familyMembers
FROM tableB
GROUP BY person
这会同时忽略“组
”列,但如果表B中没有记录,则会忽略任何人(例如示例中的Jerry)
要包括Jerry,您需要执行以下操作。这将检查familyMembers是否为NULL
并返回0,否则将返回1。然后将所有记录相加,得到总记录数,按组和人员列进行划分
SELECT
groups,
people,
SUM(CASE
WHEN familyMembers IS NULL THEN 0
ELSE 1
END) AS count_familyMembers
FROM tableA
LEFT JOIN tableB
ON tableA.people = tableB.person
GROUP BY groups,
people
如果上述操作有效,则可以在中添加“”以创建新表:
SELECT
groups,
people,
SUM(CASE
WHEN familyMembers IS NULL THEN 0
ELSE 1
END) AS count_familyMembers INTO new_table
FROM tableA
LEFT JOIN tableB
ON tableA.people = tableB.person
GROUP BY groups,
people
或对现有表执行“插入到”
”。如果执行“插入到”
”,则需要匹配数据和列:
INSERT INTO existingTable (groups, people, familyCount)
SELECT
groups,
people,
SUM(CASE
WHEN familyMembers IS NULL THEN 0
ELSE 1
END) AS count_familyMembers INTO new_table
FROM tableA
LEFT JOIN tableB
ON tableA.people = tableB.person
GROUP BY groups,
people
您是在MySQL中还是在Microsoft SQL Server中寻求帮助?Microsoft SQL Server会将这两种情况插入到同一个表中,还是需要插入到不同的表中?@sammuh能否添加带有示例数据的表结构以提高清晰度?它们将插入到同一个表中。