2013-10-06 145 views
1

講座和實驗室作業中的一些內容沒有得到很好的解釋。我無法顯示正確的信息。 以下是數據庫信息,僅供參考,以幫助我。 The database tables info 這是查詢,我試圖執行 The postgresql php select statementPostgresql聚合和非聚合列的使用情況,分組

這導致了這個SQL錯誤被throwned

連接到數據庫! 查詢失敗:ERROR:列「city.name」必須出現在GROUP BY子句或聚合函數LINE 3使用:city.name^

現在,如果我不加city.name進組BY子句,它返回4096行!我不希望發生這種情況,結果必須按232行的國家名稱分組。我只想顯示國家名稱,城市名稱和該國人口最多的城市。城市名稱讓我失望,我猜測有更復雜的更多語法重型解決方案。 感謝您提供任何幫助。 - 湯姆里斯

回答

0

你需要的東西是這樣的:

select 
     country.name, 
     city.name, 
     mp.maxpop 
from 
     lab6.country, 
     lab6.city, 
     (select 
       country_code, 
       max(population) as maxpop 
     from 
       lab6.city 
     group by 
       country_code 
     ) mp 
where 
     country.country_code=mp.country_code and 
     country.country_code=city.county_code and 
     mp.maxpop=city.population 

筆記:

  • 這可以給你更多的結果/縣。
  • 您的原始查詢不起作用,因爲在ansi sql中,您無法僅返回聚合或按來自「group by」查詢的表達式進行分組。 (如錯誤提及)
+0

好的,這樣做更有意義,教授提供了一個與此非常相似的例子,但它只在一張桌子上,我無法連接點。謝謝Lajos –

+0

歡迎。還有其他方法可以實現相同的結果,但它們不是ansi sql:http://www.postgresql.org/docs/8.4/static/tutorial-window.html在學校裏,您可能應該練習所學的方法。 –

+0

我很確定窗口函數是標準的SQL。我認爲你的第一個'where'應該是'from',你可能想要對這些討厭的隱式連接做些什麼。 –