sql - 如何在特殊情况下分组

标签 sql oracle group-by

当前,当我发出此SQL时,它将获得不同的用户名。

我有一些不同的用户名,它们代表组,例如GRP_BSN

我想将所有其他用户名(恰好是数字)分组为一个组,例如GRP_OTHERS

select username, count(*)
from host
where seq between 0 and 2000
group by username;

63149   1
63732   1
64110   2
70987   12
76841   4
GRP_BSN 226
GRP_ASN 243
GRP_DSC 93

我可以实现以下目标吗?
GRP_OTHERS 20
GRP_BSN 226
GRP_ASN 243
GRP_DSC 93

编辑:来自答案的修改查询
select username, count(*)
from host
  where created_dt 
  -- date selection
  between to_date('2012-may-23 00:00:00', 'yyyy-mon-dd hh24:mi:ss') 
  and to_date('2012-may-23 23:59:59', 'yyyy-mon-dd hh24:mi:ss')
GROUP BY CASE
             WHEN REGEXP_LIKE(username, '^\d+$') THEN 'GRP_OTHERS'
                                                 ELSE username
         END;

最佳答案

@bfavaretto很好(对他+1),但是如果您不知道username前缀或它们不同,则可以使用类似以下内容的方法:

GROUP BY CASE
             WHEN REGEXP_LIKE(username, '^\d+$') THEN 'GRP_OTHERS'
                                                 ELSE username
         END

关于sql - 如何在特殊情况下分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763043/

相关文章:

mysql - 选择分组数据进行统计

Mysql - 多组查询

Python Sqlite 一次插入一个数字字符串

Oracle SQLPlus 根据变量设置环境变量

sql - Laravel 7 时间戳迁移总是返回 0000-00-00 00 :00:00 when importing a csv excel file

oracle - 识别oracle程序中的非法提交

sql - ORA-12704 : character set mismatch in case statement

python - 使用特定规则重新排序 pandas DataFrame

php - mysql得到第4、5、6、7个结果

java - 如何比较两行或获取值与比较的行不匹配的字段?