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" 부분만 빼면 확인될꺼예요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 |