2015-12-13 140 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