我已經提供了模式和示例數據的sql小提琴。在查詢中帶有多個計數的SQL煩人
http://sqlfiddle.com/#!2/e9d22/7/0
如果我想知道在泰國有多少省多少城市。
Country Name | No. Provinces | No. Cities
Thailand | 77 | 1234
我想它需要使用多個COUNT(*),但我不知道如何使用它。
有人知道請提出解決方案嗎?
我已經提供了模式和示例數據的sql小提琴。在查詢中帶有多個計數的SQL煩人
http://sqlfiddle.com/#!2/e9d22/7/0
如果我想知道在泰國有多少省多少城市。
Country Name | No. Provinces | No. Cities
Thailand | 77 | 1234
我想它需要使用多個COUNT(*),但我不知道如何使用它。
有人知道請提出解決方案嗎?
您需要使用GROUP BY
和COUNT
:
SELECT c.name, count(distinct p.id) provincecoutn, count(distinct city.id) citycount
FROM country c
LEFT JOIN province p on c.id = p.country_id
LEFT JOIN City on p.id = city.province_id
GROUP BY c.name
好運。
這是不正確的(http://sqlfiddle.com/#!2/e9d22/15/0) 省的數量應該是兩個。 –
@AtomSkaaskaHic - Nope - 在你的數據中,省只有1個國家ID爲1的記錄:)第二條記錄指向國家ID 2.有意義嗎? – sgeddes
好吧,你是對的:)我的錯 –
試試這個:
SELECT
C.Name, COUNT(DISTINCT P.Id) NoProvance, COUNT(CC.Id) NoCities
FROM country C
JOIN province P
ON C.Id = P.COUNTRY_ID
JOIN city CC
ON P.Id = CC.province_id
WHERE C.Name = 'Thailand'
GROUP BY C.Name
我嘗試你的小提琴,但它不正確。省份號碼應爲2,城市號碼應爲3. –
@AtomSkaaskaHic檢查您的數據。一切正常。 –
它可能更快前計數每個省城市加入到省:(!)
SELECT c.name AS "Country Name"
,count(p.id) AS "No. Provinces"
,sum(ci.city_ct) AS "No. Cities"
FROM country c
LEFT JOIN province p ON p.country_id = c.id
LEFT JOIN (
SELECT province_id, count(*) AS city_ct FROM city GROUP BY 1
) ci ON ci.province_id = p.id
GROUP BY 1
-> sqlfiddle PostgreSQL的
[你有什麼嘗試?](http://whathaveyoutried.com) – 2013-02-06 17:55:12
可能重複的[SQL查詢計數()多個表](http://stackoverflow.com/questions/1379723/sql-query-to -count-multiple-tables) – glomad
您的sqlfiddle用於MySQL,而您的問題被標記爲PostgreSQL。而@ithcy提出了一個Oracle問題作爲重複(根本不重複)。任何人都需要咖啡嗎?! –