为什么group by需要所有非聚合列

时间:2014-02-06 17:46:53

标签: sql group-by

在sql中,此查询的语法无效:

select country,city, sum(income) from table1 group by country.

因为该群体期望国家和城市,而不仅仅是国家。 但为什么会这样呢?因为我可能希望结果按国家/地区分组。所以在下表中:

country   city            income

canada    toronto          100
canada    montreal          100
us        LA               200
us        NY               300

如果我想输出:

country   city           sum( income)

canada    toronto          200
canada    montreal          200
us        LA               500
us        NY               500

我的分组条款应该是什么?

1 个答案:

答案 0 :(得分:2)

如果您使用的是Sql Server,则可以执行此操作

select 
  country,
  city, 
  sum(income) over (partition by country)
from 
  table1 

或者,如果您使用的是其他数据库,则可以使用子查询

  select 
      t1.country,
      t1.city, 
      (select sum(t2.income) from table1 t2 where t1.country = t2.country)
    from 
      table1 t1