2012-11-15 111 views
1

我認爲這是一個相對直接的問題,但我花了下午的時間尋找答案,但還找不到它。所以...在SQL中總結案例查詢的結果

我有一個國家列和數字列的視圖。我想讓任何小於10的數字'其他',然後將其他數字合併成一個數值。

例如,

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

我用案例如下:

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

這與小於10的數列其他替代國價值,但我不知道如何總結他們。我想最終看起來像這樣的表/視圖:

AR 10 
AU 11 
BE 23 
Other 12 

任何幫助,非常感謝。

回答

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 
+0

這工作完美。非常感謝。 –

3

只需按你的case語句:

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 
0

你需要一個組由

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 
1
select country, number 
from your_table 
where number >= 10 
union 
select 'Other' as country, sum(number) 
from your_table 
where number < 10 
+0

這是個好主意。 –

+0

雖然「union all」會比'union'更受歡迎。 –

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子句中。