Mysql 涉及计数的非常基本的SQL查询

Mysql 涉及计数的非常基本的SQL查询,mysql,sql,Mysql,Sql,假设我有以下模式 Company: -> company_id -> company_name Building_to_company: -> building_id -> company_id 因此,每栋建筑都有自己的id以及一个公司id,该id将其与一家公司联系起来 下面的查询提供了两列—一列是公司名称,另一列是其关联的建筑 SELECT company.company_name, building_to_company.building_id FROM com

假设我有以下模式

Company:
-> company_id
-> company_name

Building_to_company:
-> building_id
-> company_id
因此,每栋建筑都有自己的id以及一个公司id,该id将其与一家公司联系起来

下面的查询提供了两列—一列是公司名称,另一列是其关联的建筑

SELECT company.company_name, building_to_company.building_id 
FROM company, building_to_company 
WHERE company.company_id = building_to_company.company_id;
返回的表如下所示:

Company Name | Building Id
Smith Banking  2001
Smith Banking  0034
Smith Banking  0101
Smith Banking  4055
Reynolds       8191
TradeCo        7119
TradeCo        8510
这一切都很简单

但是我需要做一些不同的事情。我需要两列。一个是公司名称,右边是它拥有的建筑数量。还有一点额外的挑战,我只想列出拥有3栋或更少建筑的公司

SELECT company.company_name, building_to_company.building_id 
FROM company, building_to_company 
WHERE company.company_id = building_to_company.company_id;

在这一点上,我唯一真正取得的进展就是提出了上面的问题。我知道我必须使用building_id列中的count,并计算与每个公司相关的建筑物数量。然后在这一点上,我可以通过使用一些东西来限制事情,比如x<4

你基本上已经用文字表达了。假设公司名称是唯一的,您需要在解释中添加一个GROUP BY子句以使其生效:

要将其限制在拥有3栋或更少建筑的公司,关键是必须使用HAVING条款,而不是WHERE。这是因为您希望根据聚合计数的结果进行筛选;简言之,过滤器在聚合之前,在聚合之后:

SELECT company.company_name, COUNT(building_to_company.building_id)
FROM company
INNER JOIN building_to_company 
    ON company.company_id = building_to_company.company_id
GROUP BY company.company_name
HAVING COUNT(building_to_company.building_id) < 4

我想你想要这样的东西

SELECT c.company_name, count(b.building_id)
FROM 
  company as c, 
  building_to_company as b 
WHERE c.company_id = b.company_id
GROUP BY c.company_name;

使用下面的SQL语句按降序查找具有自己的建筑计数的公司名称

SELECT company.company_name, count(building_to_company.building_id)
FROM company (nolock), building_to_company(nolock) 
WHERE company.company_id = building_to_company.company_id
group by  company.company_name
having count(building_to_company.building_id)<=3
order by count(building_to_company.building_id) desc

如果您有任何问题,请告诉我。谢谢

这是什么样的sql?是否使用sql server?请尝试按计数*小于4的公司\u id分组