我要使用2个表“人口”和“ sous_nutrition”来计算供餐不足的人口/国家的比例。
“人口”表的“年份”列显示INT值:
'sous_nutrition'具有3年范围:
因此,为了匹配它们,我进行了一项操作以删除提到的第二年(破折号),并将其全部转换为INTEGER:
WHERE CAST(SUBSTR(sous_nutrition.year,6,4) AS INTEGER) = population.year
这样,我得到了一个可以匹配的唯一INT,但这将是第一年。例如:
在2011-2013年间,我保持着2011年的价值。
因此,我想保留中间的值(在我们的示例中为2012),并将结果增加+1。
您将如何做?
这是实际代码:
SELECT sous_nutrition.country,
sous_nutrition.nb_persons_avg_3y / population.population as nutrition_ratio,
population.year
FROM sous_nutrition, population
WHERE CAST(SUBSTR(sous_nutrition.year,6,4) AS INTEGER) = population.year
AND sous_nutrition.country = population.country
ORDER BY nutrition_ratio DESC
答案 0 :(得分:0)
我认为您可以选择范围的开头并加上一年:
SELECT n.country,
( n.nb_persons_avg_3y / p.population) as nutrition_ratio,
p.year
FROM sous_nutrition n JOIN
population p
ON n.country = p.country AND
CAST(SUBSTR(sous_nutrition.year, 1, 4) AS INTEGER) + 1 = p.year
ORDER BY nutrition_ratio DESC