DB 구조
no | char1 | char2 | char3 | char4 |
1 | a | b | c | d |
2 | a | b | c | d |
3 | a | c | d | e |
원하는 결과
쿼리를 던졌을 때, 1행과 2행은 char1과 char2가 같으니 1개로 나오고, 3행은 char1은 같으나 char2가 다르므로 중복으로 처리 되지 않게 하고 싶습니다. 그러나 아래의 쿼리문으로 던지게 되면 당연하게도 전부 중복으로 인식되어 1개의 결과만 출력됩니다.
현재 쿼리문
SELECT char1, char2, char3, char4, count(*) FROM abcde WHERE char1 = 'a' group BY char1, char2, char3, char4 having count(*) > 1
이 쿼리문을 어떻게 조절해야 제가 원하는 결과를 출력할 수 있을까요..
요컨데 결과가
no | char1 | char2 | char3 | char4 |
1 | a | b | c | d |
2 | a | c | d | e |
이렇게 나오는 것을 원하고 있습니다..
저 쿼리문에서 어떻게 수정을 해야 할지 조언좀 부탁드립니다...
안녕하세요. 질문 감사 드립니다.
알려주신 sql문은 조건절에서 char1 컬럼에 대하여 데이터를 ‘a’값으로 제한하므로 group by 절에서 char1부분은 없어도 됩니다.
또한 char1과 char2 컬럼으로만 결과를 출력하려고 하시는 것이기 때문에 char3, char4 컬럼은 굳이 group by절에 넣을 필요가 없습니다. Having 절에서는 중복 개수가 1 초과 인 것만 출력하도록 되어있어, 위의 조건으로 만든 데이터 중에서 char1과 char2 컬럼이 중복이 되지 않는 행은 출력하지 못하도록 제한하고 있습니다. 이는 DB 구조와 데이터를 보았을 때 결과가 1개만 출력되는 원인입니다.
위의 설명을 정리한 sql은 다음과 같습니다.
Select char1, char2, char3, char4 from abcde where char1=’a’ group by char2;
위의 sql을 이용하여 결과를 확인 부탁 드리며 만약 원하시는 결과가 나오지 않는다면 댓글 부탁 드립니다.