Sql 查找人们持有的证书数量,按行星分组。
这是我SQL家庭作业的一部分,我不能对它掉以轻心。它应该有两个列,name和CertCount。其中name=行星名称。和CertCount=拥有该家庭世界的所有人拥有的证书总数 以下是我正在使用的表格: 这是我目前的疑问:Sql 查找人们持有的证书数量,按行星分组。,sql,Sql,这是我SQL家庭作业的一部分,我不能对它掉以轻心。它应该有两个列,name和CertCount。其中name=行星名称。和CertCount=拥有该家庭世界的所有人拥有的证书总数 以下是我正在使用的表格: 这是我目前的疑问: SELECT bsg_people.homeworld, (SUM(cid) AS 'CertCount' FROM bsg_people INNER JOIN bsg_cert_people ON id=cid) GROUP BY bsg_people.
SELECT bsg_people.homeworld, (SUM(cid)
AS 'CertCount'
FROM bsg_people
INNER JOIN bsg_cert_people ON id=cid)
GROUP BY bsg_people.homeworld;
我似乎无法理解这一点,因为计算每个人拥有的证书数量是没有价值的。非常感谢您的帮助。使用一个简单的计数(*)
,不使用子查询,并连接到右边的列-您的粘贴箱显示person的外键处于pid
(而不是cid
):
另外,连接到行星表以获得输出中行星的名称
试试这个:
select bsg_planets.name homeworld, count(*) CertCount
from bsg_planets
join bsg_people on bsg_planets.id = bsg_people.homeworld
join bsg_cert_people on id = pid
group by bsg_planets.name
此外,您还有一个语法错误:您引用了别名“CertCount”,如下所示:“CertCount”
,但这是一个字符串文字。您需要一个不带引号的别名,如CertCount使用一个简单的count(*)
,不带子查询并连接到右列-您的pastebin显示person外键处于pid
(不是cid
):
另外,连接到行星表以获得输出中行星的名称
试试这个:
select bsg_planets.name homeworld, count(*) CertCount
from bsg_planets
join bsg_people on bsg_planets.id = bsg_people.homeworld
join bsg_cert_people on id = pid
group by bsg_planets.name
此外,您还有一个语法错误:您引用了别名“CertCount”,如下所示:“CertCount”
,但这是一个字符串文字。你需要一个没有引号的别名,像这样CertCount
,而不是直接回答你的问题(这会有点违背你要学习的家庭作业的目的),我会尝试为你指出正确的方向:)
您如何将bsg_cert_人员加入bsg_人员?查看哪些字段指的是人员,哪些字段指的是认证,并确保您使用这些字段的方式正确。在这种情况下,使用表别名(而不仅仅是“id=cid”)和稍微整理一下查询确实有助于更好地了解连接和这些连接在做什么。而不是直接回答您的问题(这会有点违背您要学习的家庭作业的目的),我会试着给你指出正确的方向:)
您如何将bsg_cert_人员加入bsg_人员?查看哪些字段指的是人员,哪些字段指的是认证,并确保您使用这些字段的方式正确。在这种情况下,使用表别名(而不仅仅是“id=cid”)和稍微整理一下查询确实有助于更好地了解连接和这些连接的作用。您提供的链接不起作用。尝试在中创建表并共享。请同时提及您正在使用的db/版本。您提供的链接无效。尝试在中创建表并共享。还提到您正在使用的db/版本。我查看了粘贴箱,我还怀疑连接应该在bsg\u cert\u people.pid
上,而不是cid
@shawnt00上。我的答案中包含了你的错误发现。谢谢,但它告诉我我选择了错误的列。我想我需要加入bsg_planets以从该表中获取名称,所以我确实加入了bsg_planets,其中homeworld=id
,但它告诉我on子句中的列“id”不明确
不明确意味着它不知道您是指来自bsg_人的id
还是bsg_cert_人的。你需要告诉它是哪一个。如果你在网上搜索这个错误,你会发现什么?啊,我知道我做错了什么。它需要加入bsg_plants上的bsg_plants.id=bsg_people.homeworld
,然后按bsg_plants分组。name
我查看了粘贴箱,我还怀疑应该在bsg_cert_people.pid
而不是cid
@shawnt00上加入。我的答案中包含了你的错误发现。谢谢,但它告诉我我选择了错误的列。我想我需要加入bsg_planets以从该表中获取名称,所以我确实加入了bsg_planets,其中homeworld=id
,但它告诉我on子句中的列“id”不明确
不明确意味着它不知道您是指来自bsg_人的id
还是bsg_cert_人的。你需要告诉它是哪一个。如果你在网上搜索这个错误,你会发现什么?啊,我知道我做错了什么。它需要加入bsg\U planets上的bsg\U planets.id=bsg\U people.homeworld
,然后按bsg\U planets分组。name