2014-10-31 79 views
0

我有指公司插槽量的数据库,这些插槽可充满人.. 我想做一个查询在那里我可以看到哪些公司仍然有开口槽SQL集团子查询忽略

这是我正在尝试的查询,但它给了我错误的结果。

select 
    name, 
    slots, 
    (select count(*) from persons) as persons 
from companies 
where city_id = 3 
group by companies.id 

这应该给我一个表的插槽,以及personsfilled该公司在个人表的数额,但它的返回人员的每一次的总量。

这是结果

enter image description here

谢谢!

+2

您必须compianies表或其他联系的人士表知道如果人使用的插槽。我认为你必须检查你的表格结构。 – 2014-10-31 09:30:17

+0

显示两个表的表结构,并且您的查询将返回相同的数字,因为您每次都从人表计数数据。 – 2014-10-31 09:31:46

回答

2

就像@JoeTaras说的,你需要加入人和公司能够告诉/计算哪些人属于哪个公司。如果你不以某种方式加入,公司和个人将被独立处理和计算,这通常不是很有用。

确实可以使用不同的子查询,但这并不完全如此,并且可能比直接连接性能低。

例子:

select 
    companies.id 
    companies.name, 
    companies.slots, 
    count(persons.id) 
from companies 
left outer join persons on companies.id = persons. ... 
where companies.city_id = 3 
group by companies.id, companies.name, companies.slots 
+0

非常感谢!它也适用于:GROUP BY companies.id ..这个查询如何工作?我不应该使用子查询呢?谢谢! – Notflip 2014-10-31 09:34:11

+1

MySQL [扩展GROUP BY子句](http://stackoverflow.com/a/7596265/1048425)允许选择列表中不包含在组中的列。如果'companies.ID'是主键(这似乎是合乎逻辑的),那么只有通过这种分组才是完全合法的,因为'公司'中的所有其他字段在功能上依赖于此。这种扩展的问题出现在你滥用它的时候,例如,如果你只用'companies.name'进行分组,然后选择'companies.id' - 如果你有两家公司有相同的名称和不同的ID,那么返回的值是'ID'不是确定性的。 – GarethD 2014-10-31 09:40:29

+0

对于正确的答案也+1,但是提供即使是你已经做了什么来解决问题和原因的简单解释也会好得多。代码只有答案有限的使用,并没有解决作为一个问题和答案网站,而不是一个免费的代码写作服务的真正目的的Stackoverflow。正如老谚语所说,“给一个人一条鱼,你给他一天的时间;教一个人钓鱼,你给他一辈子” – GarethD 2014-10-31 09:43:04