2014-05-23 94 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