2013-02-06 37 views
-1

我已經提供了模式和示例數據的sql小提琴。在查詢中帶有多個計數的SQL煩人

http://sqlfiddle.com/#!2/e9d22/7/0

如果我想知道在泰國有多少省多少城市。

Country Name | No. Provinces | No. Cities 
    Thailand | 77   | 1234 

我想它需要使用多個COUNT(*),但我不知道如何使用它。

有人知道請提出解決方案嗎?

+0

[你有什麼嘗試?](http://whathaveyoutried.com) – 2013-02-06 17:55:12

+0

可能重複的[SQL查詢計數()多個表](http://stackoverflow.com/questions/1379723/sql-query-to -count-multiple-tables) – glomad

+0

您的sqlfiddle用於MySQL,而您的問題被標記爲PostgreSQL。而@ithcy提出了一個Oracle問題作爲重複(根本不重複)。任何人都需要咖啡嗎?! –

回答

1

您需要使用GROUP BYCOUNT

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 

好運。

+0

這是不正確的(http://sqlfiddle.com/#!2/e9d22/15/0) 省的數量應該是兩個。 –

+0

@AtomSkaaskaHic - Nope - 在你的數據中,省只有1個國家ID爲1的記錄:)第二條記錄指向國家ID 2.有意義嗎? – sgeddes

+0

好吧,你是對的:)我的錯 –

1

試試這個:

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 

SQL FIDDLE DEMO

+0

我嘗試你的小提琴,但它不正確。省份號碼應爲2,城市號碼應爲3. –

+0

@AtomSkaaskaHic檢查您的數據。一切正常。 –

0

它可能更快前計數每個省城市加入到省:(!)

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的