2013-04-26 99 views
1

我有一个Oracle数据库表以下值是否可以按某些值分组?

+------+--------+ 
| id | Name | 
+------+--------+ 
| 0 | One | 
| 1 | Two | 
| 2 | Three | 
| 3 | four | 
| 4 | One | 
| 5 | One | 
| 6 | Two | 
| 7 | five | 
+------+--------+ 

我想指望其名“一号”的行数,“两课”,名称的休息。 结果集应该像

+------+--------+ 
| name | count | 
+------+--------+ 
| One | 3  | 
+------+--------+ 
| Two | 2  | 
+------+--------+ 
| Rest| 3  | 
+------+--------+ 

任何帮助吗?

回答

4
select 
    case name 
    when 'One' then 'One' 
    when 'Two' then 'Two' 
    else 'Rest' 
    end name, 
    count(*) 
from 
    my_table 
group by 
    case name 
    when 'One' then 'One' 
    when 'Two' then 'Two' 
    else 'Rest' 
    end 

避免重复:

select 
    name, 
    count(*) 
from (
    select 
    case name 
     when 'One' then 'One' 
     when 'Two' then 'Two' 
     else 'Rest' 
    end name 
    from 
    my_table) 
group by 
    name 
+0

非常感谢。另外我正在看解码功能。 – 2013-04-26 08:38:28

+0

我会使用Case而不是Decode() - 它符合ANSI标准,更灵活,具有短路评估功能,并且在更符合SQL的情况下处理空值。 – 2013-04-26 08:39:45

+0

好的。谢谢你的比较 – 2013-04-26 08:54:14

相关问题