2014-05-23 63 views
1

有人可以向我解释如何查询这些表以获取他们所在国家/地区的公司中雇员的数量?结果列的数量应为3,公司,国家和员工。公司和分支机构相连,但国家与城市相连,所以我不知道如何解决这个问题。谢谢你们,感谢它!用四张表查询SQL

CREATE TABLE country (
    id   integer NOT NULL PRIMARY KEY, 
    name  varchar NOT NULL, 
    population integer check(population > 0) 
); 

CREATE TABLE city (
    id   integer NOT NULL PRIMARY KEY, 
    name  varchar NOT NULL, 
    population integer check(population > 0), 
    country integer NOT NULL REFERENCES country(id) 
); 

CREATE TABLE company (
    id   integer NOT NULL PRIMARY KEY, 
    name  varchar NOT NULL 
); 

CREATE TABLE branch (
    company integer NOT NULL REFERENCES company(id), 
    city  integer NOT NULL REFERENCES city(id), 
    name  varchar, 
    employees integer NOT NULL, 
    PRIMARY KEY (company, city) 
); 

这是我做过什么,但我知道这是错的,我想我的组合,但到目前为止,没有什么是正确的!

SELECT 
branch.employees, 
company.name AS company, 
country.name AS country 

FROM branch 

INNER JOIN company 
ON branch.company = company.id 

INNER JOIN country 
ON city.country = country.id 
ORDER BY country; 
+3

了解关于sql中的连接。 –

+2

当处理艰难的连接时,我总是从一个简单的开始。取下一个(比如分支和公司),然后添加更多。 – MPelletier

+0

如果你想获得就业人数,你还需要使用总和函数,与关键字 – kurast

回答

0
SELECT 
    company.name AS company, 
    country.name AS country, 
    sum(branch.employees) AS country_employees 
FROM branch 
JOIN company ON company.id = branch.company 
JOIN city ON city.id = branch.city 
JOIN country ON country.id = city.country 
GROUP BY company.name, country.name 
ORDER BY country.name, company.name; 

你要总结在每家公司的员工数量,对于每一个他们在工作的国家。这意味着你必须GROUP BY每个分支的两个领域,而你SUM的员工人数。即使您不显示任何数据,也需要使用城市表。

阅读关于聚合函数的更多背景信息。

+0

谢谢!我尝试了很多在线资源,但其中大部分都是基础资源...这解释了很多。谢谢一堆! – HigherPurpose