通过SQL查询获取组中的相关列

时间:2018-10-01 13:26:50

标签: sql postgresql

我有一个数据库,其中包含与国家/地区有关的数据,简化后看起来像这样:

ID | country_id | country_ISO | var_value
1  | 1          | FR          | 10
2  | 2          | BE          | 15
3  | 3          | NL          | 20
4  | 1          | FR          | 6
5  | 2          | BE          | 8
6  | 2          | BE          | 12

我想获取“ var_value”值的总和,但与此同时,我想同时具有country_id和country_ISO。

我可以这样做:

SELECT
  country_ISO,
  SUM(var_value) AS sum_of_value
FROM
  table_name
GROUP BY
  country_ISO;

此查询将给我var_value和国家/地区ISO的总和,但我也想获取country_id。如何子查询/自我联接以获得(以独特的方式)与例如country_ISO相关的额外列?

3 个答案:

答案 0 :(得分:3)

只需在GROUP BY子句中包括该列:

SELECT country_id, country_ISO, SUM(var_value) AS sum_of_value
FROM table_name tn
GROUP BY country_id, country_ISO;

答案 1 :(得分:3)

由于country_iso始终依赖于country_id,因此只需将GROUP BY扩展country_id

SELECT country_id,
       country_iso,
       sum(var_value) sum_of_value
       FROM table_name
       GROUP BY country_id,
                country_iso;

答案 2 :(得分:1)

如果contry_id,contry_ISO与1:1匹配,则只需将contry_id,contry_ISO分组即可。

SELECT
  contry_id,
  country_ISO,
  SUM(var_value) AS sum_of_value
FROM
  table_name
GROUP BY
  contry_id,
  country_ISO;