1

我认为这是一个相对简单的问题,但我花了一个下午寻找答案,但还没有找到。所以...

我有一个国家列和一个数字列的视图。我想让任何数字小于 10 '其他',然后将'其他'相加成一个值。

例如,

AR  10
AT  7
AU  11
BB  2
BE  23
BY  1
CL  2

我使用 CASE 如下:

select country = case
when number < 10 then 'Other'
else country
end,
number
from ...

这会将数字列中小于 10 的国家值替换为其他值,但我不知道如何对它们求和。我想得到一个看起来像这样的表/视图:

AR  10
AU  11
BE  23
Other  12

任何帮助是极大的赞赏。

4

5 回答 5

3

只需按您的案例陈述分组:

select 
  country = case
     when number < 10 then 'Other'
     else country
  end,
  sum(number)
from ...
group by
  case
     when number < 10 then 'Other'
     else country
  end
于 2012-11-15T16:58:53.147 回答
1
select country, number
from your_table
where number >= 10
union
select 'Other' as country, sum(number)
from your_table
where number < 10
于 2012-11-15T17:00:30.553 回答
0

你需要一个 Group by

 select country = case
    when number < 10 then 'Other'
    else country
    end,
    sum(number)
    from ...
    group by 
       case when number < 10 then 'Other' else country end
于 2012-11-15T17:00:06.463 回答
0

您可以将其包装到派生表中以避免重复 CASE 语句。

select country, 
       sum(number) as number
from (
    select case
              when number < 10 then 'Other'
              else country
           end as country,
           number
    from ...
) t
group by country
于 2012-11-15T17:01:54.377 回答
0

你非常接近......你不能做国家=案例......试试

Select
      Case when number < 10 then 'Other'
           Else country end  as finalcountry,
      Sum(number) as total number
   From
      YourTable
   Group by
      Finalcountry

由于我没有方便的 MySQL,我不记得它是否允许您使用最终列名作为 group by... 您可能也必须将 case when 子句重新复制到 group by 子句中。

于 2012-11-15T18:30:09.123 回答