查找按行星分组的人员持有的认证数量。

时间:2016-02-02 01:45:18

标签: sql

这是我的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;

我似乎无法弄清楚这一点,因为没有价值来计算每个人拥有的证书数量。我感谢任何帮助。

2 个答案:

答案 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")并对查询进行整理可以真正帮助更好地了解联接等等正在做什么。