2015-12-13 138 views
1

我必須在20-24範圍內的最大男性數量的國家/地區顯示1行的輸出。但是,sex_ratio應該顯示所有範圍?SQL查詢簡單問題子查詢

SELECT age,male ,female,sex_ratio,country      
FROM census.population           
WHERE country<> 'Aggregated' and census.population.age='20-24' 
ORDER BY male DESC FETCH FIRST 1 ROW ONLY; 

應該是這樣的:

--*** select age,          **** 
    --***  total number of males,      **** 
    --***  total number of females,     **** 
    --***  sex_ratio,(of every age)     **** 
    --***  country         **** 
    --*** where the country has the highest number of  **** 
    --*** males in the 20-24 age range      **** 

我的輸出至今:

AGE     MALE      FEMALE  SEX_RA COUNTRY 
20-24     58275712     51794339  112.5 India  

結果應該是印度,因爲它有男性在20-24的最大數量範圍與每個年齡的性別比(不僅僅是20-24)。 census.population.age ='總計'將提供每個年齡段的性別比例。我如何獲得20至24歲男性的總年齡和全國性別比?什麼是選擇正在爲sex_ratio工作? 我的想法是這樣的,但它不起作用。

SELECT age,male ,female,sex_ratio,country      
FROM census.population           
WHERE country<> 'Aggregated' and census.population.age='20-24' 
AND sex_ratio = (select sex_ratio from census.population 
WHERE census.population.age = 'Total') 
ORDER BY male DESC FETCH FIRST 1 ROW ONLY; 

我的數據庫

Column Name  Description 
REGION    "WORLD" 
COUNTRY   "AGGREGATED" and 228 separate countries 
YR     "2015" 
AGE    "Total" and 29 separate age ranges 
BOTH_SEXES   AGE range number 
MALE    AGE range number 
FEMALE    AGE range number 
PERCENT_BOTH_SEXES AGE range percent 
PERCENT_MALE  AGE range percent 
PERCENT_FEMALE  AGE range percent 
SEX_RATIO   AGE range ratio 
+1

你能否提供樣本預期產出?我很難理解你想在這裏實現什麼。 – Shadow

+0

我更新了我的帖子。我知道我需要一個子選擇,但我卡住了。 – bastel

回答

0

OK,更清晰的一點了。是的,你需要一個子選票,你可以得到20-24歲年齡組中男性人數最多的國家,而這個國家並不是總數。然後你得到國家(或者國家如果平局),最後你得到給定國家的總結。

select t2.country, sum(t3.male) as totalmales, sum(t3.female) as totalfemales 
from (select max(male) as maxmale from table where age='20-24' and country<>'Aggregate') t 
inner join table t2 on t.maxmale=t2.male 
inner join table t3 on t2.country=t3.country 
where t2.age='20-24' and t2.country<>'Aggregate' 
group by t2.country 

正如你所看到的,我沒有在上面的查詢中加入sex_ratio。原因是我不明白你想在那裏看到什麼。

+0

任何年齡段都有一個性比例。像0-4 102.9,5-9 103.3等等。我會給出總體性別比例。年齡則是「總計」。該語法不適用於我的系統(ibm)。 – bastel

+0

恐怕我無法根據「無效」反饋對我的代碼進行任何調整。你需要告訴我確切的錯誤信息。我仍然不明白你希望在性別領域看到什麼作爲輸出。更詳細地描述輸入將無濟於事。描述預期的輸出。 – Shadow

+0

好吧,我差不多完成了。 'SELECT年齡,男性,女性,sex_ratio,國家 FROM census.population WHERE國<> '彙總' 和census.population.age = '20 -24' ORDER BY雄性DESC FETCH FIRST 1個ROW ONLY; ' 正在發放1行印度是正確的,但我的性比例仍然是20-24歲,它應該是年齡總和。現在,這是我需要我的Subselect的地方。 – bastel

0

你可以嘗試:

SELECT age, male, female, sex_ratio, country 
FROM census.population 
WHERE country = (SELECT country 
       FROM census.population 
       WHERE male = MAX(male) 
       AND sex_ratio = '20-24'); 

如果您使用子查詢選擇具有男性的最大數量和性別比例是20-24之間的國家。您不必訂購選項,因爲退貨只會是一個條目。

,或者你可以嘗試:

SELECT age, male, female, sex_ratio, country 
FROM census.population 
GROUP BY country 
HAVING MAX(male) 
AND sex_ratio = '20-24' 
ORDER BY male DESC; 

使用HAVING子句,如果你真的想訂購所有的結果,這將返回所有國家的數據庫。

+0

您的查詢忽略聚合記錄,第二個查詢是針對SQL標準,只在某些設置下運行在MySQL中。對總的男性/女性和整個同齡羣體性別比率沒有反應。 – Shadow

+0

我現在有權選擇(根據20-24歲的國家和地區的最大男性),但我需要一個來自所有年齡段,不是20-24歲的國家的特殊sex_ratio記錄。 – bastel

+0

那麼你想列出每個年齡段的最大男性人數? – intrigatory57