sql 짜는 것 좀 도와주세요 ㅠㅠ
테이블 A가 있습니다. 컬럼이 3개 NO, TAG, VALUE 가 있는데
NO | TAG | VALUE |
1 | A | 250 |
1 | A | 250 |
1 | B | 500 |
2 | A | 200 |
2 | A | 200 |
2 | B | 500 |
예를 들면 값이 이렇습니다.
이때
no 컬럼이 같을 때 tag가 a 인 것의 value 합과
tag 가 b인 것의 합이 다른 경우의 no를 찾는 쿼리를 짜야합니다.
(예를 들면 no가 1일때, a의 합은 500이고 b의 합도 500이니까 아니고,
no가 2일때 a의 합은 400이고 b의 합은 500이므로 no = 2 가 나오는 쿼리를 짜야합니다. )
group by를 사용해야할지
서브쿼리를 사용해야할지
join을 해야할지 도무지 감이 안옵니다 ㅠㅠ
DB 종류 명시하면 좋을꺼 같아요.
아래는 오라클 기준인데, 다른 DB이면 "FROM DUAL" 부분만 빼면 확인될꺼예요.
WITH dataTble (NO, TAG, VALUE) AS ( SELECT 1, 'A', 250 FROM DUAL UNION ALL SELECT 1, 'A', 250 FROM DUAL UNION ALL SELECT 1, 'B', 500 FROM DUAL UNION ALL SELECT 2, 'A', 200 FROM DUAL UNION ALL SELECT 2, 'A', 200 FROM DUAL UNION ALL SELECT 2, 'B', 500 FROM DUAL ) SELECT DISTINCT NO FROM ( SELECT NO, TAG, SUM(VALUE) AS v_sum , SUM( SUM(VALUE) ) OVER(PARTITION BY NO ) AS no_sum FROM dataTble GROUP BY NO, TAG ) tmpTbl WHERE no_sum <> v_sum *2