在INT中转换STR时如何增加值?

时间:2019-07-12 08:52:24

标签: sql operation

我要使用2个表“人口”和“ sous_nutrition”来计算供餐不足的人口/国家的比例。

“人口”表的“年份”列显示INT值:

population table

'sous_nutrition'具有3年范围:

sous_nutrition table

因此,为了匹配它们,我进行了一项操作以删除提到的第二年(破折号),并将其全部转换为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

1 个答案:

答案 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