SQL SUM问题。如何获得人口总和?

时间:2014-07-10 18:09:51

标签: sql

表:

cia ( name , region , area , population , gdp )

我自学SQL并且遇到了一些我无法弄清楚的东西。我试图从数据库中提取的数据是比利时,荷兰和卢森堡的人口总数。我尝试过以下方法:

SELECT SUM(population) FROM cia WHERE name = 'Belgium' AND 'Netherlands' AND 'Luxembourg';

返回的值似乎不正确。我错过了什么?

2 个答案:

答案 0 :(得分:5)

使用or代替and,因为单行可以同时拥有这3个设置。您的name单元格只能是或。

对于值列表,您还可以使用IN()

SELECT SUM(population)
FROM cia 
WHERE name IN('Belgium', 'Netherlands', 'Luxembourg')

答案 1 :(得分:0)

Uriils的答案是最好的/最一致的最佳选择;但是,根据您的SQL版本和数据集的大小,您可能需要考虑使用UNION来加速操作(通常只是Oracle的一个问题)。因此,如果您已经/将在Oracle中,以下可能会运行得更快,具体取决于您的设置。

SELECT SUM(result_sum) FROM
(
  SELECT SUM(population) AS result_sum 
    FROM cia 
    WHERE name = 'Belgium' 
  UNION
  SELECT SUM(population) AS result_sum 
    FROM cia 
    WHERE name = 'Netherlands' 
  UNION 
  SELECT SUM(population) AS result_sum 
    FROM cia 
    WHERE name = 'Luxembourg'
)
;

在任何一种情况下,我都建议使用LOWER()并将搜索条件与所有小写答案放在一起,以防止由于大小写不一致而导致结果丢失。

SELECT SUM(result_sum) FROM
(
  SELECT SUM(population) AS result_sum 
    FROM cia 
    WHERE LOWER(name) = 'belgium' 
  UNION
  SELECT SUM(population) AS result_sum 
    FROM cia 
    WHERE LOWER(name) = 'netherlands' 
  UNION 
  SELECT SUM(population) AS result_sum 
    FROM cia 
    WHERE LOWER(name) = 'luxembourg'
)