Oh *_*oon 9 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
Run Code Online (Sandbox Code Playgroud)
我可以实现这样的目标:
GRP_OTHERS 20
GRP_BSN 226
GRP_ASN 243
GRP_DSC 93
Run Code Online (Sandbox Code Playgroud)
编辑:从答案修改查询
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;
Run Code Online (Sandbox Code Playgroud)
zer*_*kms 12
@bfavaretto很好(给他+1),但是如果你不知道username前缀或它们是不同的,你可以使用类似的东西:
GROUP BY CASE
WHEN REGEXP_LIKE(username, '^\d+$') THEN 'GRP_OTHERS'
ELSE username
END
Run Code Online (Sandbox Code Playgroud)
效率不是很高,但应该可以:
SELECT
CASE WHEN username LIKE 'GRP%' THEN username ELSE 'GRP_OTHERS' END AS username,
COUNT(*)
FROM host
WHERE seq BETWEEN 0 AND 2000
GROUP BY CASE WHEN username LIKE 'GRP%' THEN username ELSE 'GRP_OTHERS' END;
Run Code Online (Sandbox Code Playgroud)