안녕하세요.
A | B | C | D |
user | 261 | 571 | 404 |
user | 251 | 563 | 404 |
user | 251 | 564 | 404 |
user | 252 | 565 | 404 |
user | 253 | 566 | 404 |
user2 | 254 | 567 | 404 |
user2 | 255 | 568 | 404 |
user2 | 263 | 575 | 401 |
user2 | 265 | 581 | 401 |
user2 | 100 | 100 | 401 |
테이블이 있으면 b,c는 emp 테이블에 자주 나오는 상사 부하직원 같은 관계이고 D는 404 성공 401 실패 같은 개념입니다.
user별 그룹으로 401갯수/404갯수와 B그룹별 401갯수/404갯수 구하고 싶은데
쉽지 않네요. decode나 case로 decode(d, 401, count(*))를 해도 장애가 떨어지고..
WITH T AS ( SELECT 'user' AS a, 261 AS b, 571 AS c, 404 AS d FROM DUAL UNION ALL SELECT 'user', 251, 563, 404 FROM DUAL UNION ALL SELECT 'user', 251, 564, 404 FROM DUAL UNION ALL SELECT 'user', 252, 565, 404 FROM DUAL UNION ALL SELECT 'user', 253, 566, 404 FROM DUAL UNION ALL SELECT 'user2', 254, 567, 404 FROM DUAL UNION ALL SELECT 'user2', 255, 568, 404 FROM DUAL UNION ALL SELECT 'user2', 255, 568, 404 FROM DUAL UNION ALL SELECT 'user2', 263, 575, 401 FROM DUAL UNION ALL SELECT 'user2', 265, 581, 401 FROM DUAL UNION ALL SELECT 'user2', 100, 100, 401 FROM DUAL ) SELECT a, d, COUNT(*) FROM T GROUP BY a, d
B속성 기준 그룹별 401/404
SELECT b, d, COUNT(*) FROM T GROUP BY b, d
2개 합친다면
SELECT a, d, COUNT(*) FROM T GROUP BY a, d UNION ALL SELECT b||'', d, COUNT(*) FROM T GROUP BY b, d
유저별
user | 261 | 571 | 404 | 100 |
user2 | 100 | 100 | 401 | 40 |
b컬럼 별
user | 251 | 563 | 404 | 100 |
user | 251 | 564 | 404 | 100 |
user | 252 | 565 | 404 | 100 |
user | 261 | 571 | 404 | 100 |
user2 | 263 | 575 | 401 | 0 |
같이요 3컬럼 조인걸어서 나오는거라
저는 count((decode(A, 404, 'succ'))) as a , count((decode(A, 401, 'fail'))) as b 이런식으로 하고 그룹바이로 진행 중인데
좀 아닌거 같아서요. 저기서 a/a+b도 안먹혀서 함수 다시 다적어야되고..
-- 다음에는 정확한 샘플과 결과를 올려주세요. WITH T (A,B,C,D) AS ( SELECT 'user' , 261 , 571 , 404 FROM DUAL UNION ALL SELECT 'user' , 251 , 563 , 404 FROM DUAL UNION ALL SELECT 'user' , 251 , 564 , 404 FROM DUAL UNION ALL SELECT 'user' , 252 , 565 , 404 FROM DUAL UNION ALL SELECT 'user' , 253 , 566 , 404 FROM DUAL UNION ALL SELECT 'user2' , 254 , 567 , 404 FROM DUAL UNION ALL SELECT 'user2' , 255 , 568 , 404 FROM DUAL UNION ALL SELECT 'user2' , 263 , 575 , 401 FROM DUAL UNION ALL SELECT 'user2' , 265 , 581 , 401 FROM DUAL UNION ALL SELECT 'user2' , 100 , 100 , 401 FROM DUAL ) -- A 그룹별 SELECT A , COUNT(DECODE(D,404,1)) / COUNT(*) * 100 FROM T GROUP BY A ORDER BY A -- B 그룹별 SELECT B , COUNT(DECODE(D,404,1)) / COUNT(*) * 100 FROM T GROUP BY B ORDER BY B