MYSQL 을 사용 하고 있는데 단순 할것 같은데 생각보다 쉽게 되지 않아 질문을 드립니다.
아래와 같은 테이블이 1개가 있는데 Group Count를 하고자 하는데 많은 서브 쿼리를 사용하지 않고
구현하고자 합니다.... 잘안되네요 ㅠㅠ 도움 요청 드립니다.
■ 테이블(ID 와 Values 는 2개 테이블로 Join 해서 나온 결과 테이블 입니다.)
ID | VALUES |
A | 1 |
B | 1 |
C | 2 |
D | 3 |
E | 3 |
F | 3 |
■ 결과 테이블
(값에 따라 1이 2개고 2가 1개고 3이 3개인데 현재 위에 테이블이 2개 테이블로 JOIN 된 테이블이라 서브쿼리로 재 질의 하는 방법 말고 그룹 Count를 하고 싶어요 ㅠ)
ID | VALUES | CNT |
A | 1 | 2 |
B | 1 | 2 |
C | 2 | 1 |
D | 3 | 3 |
E | 3 | 3 |
F | 3 | 3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SELECT a.id , b. values , c.cnt FROM t1 a , t2 b , ( SELECT t2. values , COUNT (*) cnt FROM t1 , t2 WHERE t1.id = t2.id GROUP BY t2. values ) c WHERE a.id = b.id AND b. values = c. values ; -- MySQL 에는 분석함수가 없으므로 서브쿼리를 써야죠. -- 만약 T1에 없는 ID가 T2에 절대로 있을 수 없다면? -- 그룹바이 서브쿼리 안에서의 조인은 안해도 되겠네요. |
with t as(
select 'A' ID, 1 val from dual union all
select 'B',1 from dual union all
select 'C',2 from dual union all
select 'D',3 from dual union all
select 'E',3 from dual union all
select 'E',3 from dual union all
select 'F',3 from dual
)
select ID
,t.val
,cnt from t,
(select val,count(val)cnt from t
group by val)a
where t.val=a.val
;