반응형
특별한 조건으로 그룹화하는 방법
현재 이 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
EDIT: 답변에서 수정된 쿼리
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는 그에게 친절하지만, 당신이 모르면,username접두사 또는 접두사가 다르거나 다음과 같이 사용할 수 있습니다.
GROUP BY CASE
WHEN REGEXP_LIKE(username, '^\d+$') THEN 'GRP_OTHERS'
ELSE username
END
그다지 효율적이지는 않지만 다음과 같이 작동해야 합니다.
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;
특정 이름 패턴 대신 작은 그룹을 하나의 버킷에 넣어 작업을 수행하고자 할 경우 다음을 사용할 수 있습니다.
select (case when cnt > 100 then username else 'OTHER' end), sum(cnt) as cnt
from (select username, count(*) as cnt
from host
where seq between 0 and 2000
group by username
) t
group by (case when cnt > 100 then username else 'OTHER' end)
언급URL : https://stackoverflow.com/questions/10763043/how-to-group-by-with-a-special-condition
반응형
'programing' 카테고리의 다른 글
| mysql의 데이터베이스에서 덤프 파일 생성 (0) | 2023.09.12 |
|---|---|
| getenv()에서 반환된 char*를 해제/삭제해야 합니까? (0) | 2023.09.12 |
| ORM 마이그레이션을 입력합니다.불필요한 쿼리 생성을 중지하는 방법 (0) | 2023.09.12 |
| 워드프레스(프론트엔드)의 대시 아이콘이 표시되지 않음 (0) | 2023.09.12 |
| 내 Git 저장소에서 참조되지 않은 블랍을 제거하는 방법 (0) | 2023.09.12 |