这是我的SQL作业的一部分,我无法绕过它。它应该有两个列,名称和CertCount。名称=行星名称。和CertCount =所有拥有该家园的人拥有的证书总数。
这些是我正在使用的表:http://pastebin.com/kNRNGQFv
这是我目前的查询:
SELECT bsg_people.homeworld, (SUM(cid)
AS 'CertCount'
FROM bsg_people
INNER JOIN bsg_cert_people ON id=cid)
GROUP BY bsg_people.homeworld;
我似乎无法弄清楚这一点,因为没有价值来计算每个人拥有的证书数量。我感谢任何帮助。
答案 0 :(得分:3)
使用简单的count(*)
,不使用子查询,加入右列 - 您的pastebin显示人员的外键位于pid
(不是{{1} }}):
cid
此外,加入行星表以获得输出中行星的名称。
试试这个:
CONSTRAINT `bsg_cert_people_ibfk_2` FOREIGN KEY (`pid`) REFERENCES `bsg_people` (`id`)
此外,您遇到语法错误:您引用了别名" CertCount"像这样: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'
。
答案 1 :(得分:1)
不是直接回答你的问题(这会使你学习的作业的目的失败),我会试着指出你正确的方向:)
你是如何将bsg_cert_people加入bsg_people的?看看哪些字段指的是人,哪些字段指的是认证,并确保您以正确的方式使用它们。虽然在这种情况下不是必不可少的,但是使用表别名(而不仅仅是" id = cid")并对查询进行整理可以真正帮助更好地了解联接等等正在做什么。