안녕하세요.
mysql 쿼리에 대해서 질문하고자 올립니다.
아래와 같이 데이터가 있을 때 code = 'A061'일 때 count(grpNo) = 1인 id만 뽑아내고 싶은데
group by를 하면서 뽑으려 해도 도저히 모르겠네요.
id0001은 code = 'A061'일때 해당 데이터의 grpNo = 2인 count(grpNo) 가 3 이라서 뽑지 않고
id0002의 경우 grpNo = 1인 count(grpNo)가 1이라서,
결과값으로 id0002 를 뽑고 싶은데 어떻게 해야할까요?
database에 대한 지식이 짧아서 문의글을 남깁니다.
id | tmpCode | code | dcode | grpNo |
id001 | 0002 | A002 | A002001 | 3 |
id001 | 0003 | A003 | A003001 | 4 |
id001 | 4990 | A006 | A006001 | 2 |
id001 | 0035 | A025 | A025001 | 1 |
id001 | 4991 | A061 | A061001 | 2 |
id001 | 4992 | A062 | A062001 | 2 |
id002 | 4991 | A061 | A061001 | 1 |
id003 | 0037 | A029 | A029001 | 1 |
±×·³ ÆíÇÏ°í DB ÀÚü°¡ index °¡ ÀÖ¾î¾ß Çϴµ¥.
¾øÀ¸¸é µÎ°íµÎ°í °è¼Ó ºÒÆíÇÕ´Ï´Ù.
´ëÃæ ÀÌ·± Äõ¸®¸¦ ¿øÇϽô µí ÇÕ´Ï´Ù.
SELECT id
FROM Å×À̺í¸í a
WHERE a.code = 'A061'
AND EXISTS (
SELECT 1
FROM Å×À̺í¸í c
WHERE c.grpNo IN (
SELECT grpNo
FROM Å×À̺í¸í b
WHERE b.id=a.id and b.code=a.code
)
AND c.id=a.id
GROUP BY grpNo
HAVING COUNT(*) = 1
)
Àü Áú¹®Àº ÀÌÇØÇÑ °Å °°Àºµ¥ °áÁ¤ÀûÀ¸·Î DB¸¦ ¸ô¶ó¼ ¤¾¤¾¤¾
ÀÌ·¸°Ô ½¬¿î°É Áú¹®ÇϼÌÀ»¶ó³ª¿ä ?
count ºÎºÐÀ» ³õÃƽÀ´Ï´Ù.
Äڵ尡 A061ÀÏ ¶§ÀÇ ±×·ì³Ñ¹ö°¡ ²À 1À̾î¾ß ÇÏ´Â °Ô ¾Æ´Ï¶ó.. Äڵ尡 A061ÀÏ ¶§ÀÇ ±×·ì³Ñ¹ö°¡ ¹¹°¡ µÇ¾úµç, ±× ±×·ì³Ñ¹öÀÇ °¹¼ö¸¦ Ä«¿îÆ® Çؼ ±×°Ô 1ÀÎ °æ¿ì¿¡¸¸ ±× ID¸¦ ÃßÃâÇÏ°í ½Í´Ù..´Â ¾ê±âÀΰ¡ º¸³×¿ä. ^^;;;
Áï, id001Àº Äڵ尡 A061ÀÏ ¶§ÀÇ ±×·ì³Ñ¹ö°¡ 2Àε¥, id001ÀÇ ·¹ÄÚµå Áß ±×·ì³Ñ¹ö°¡ 2ÀÎ °Ô µµÇÕ 3°³ ÀÖÀ¸¹Ç·Î id001Àº Å»¶ô.
id002´Â Äڵ尡 A061ÀÏ ¶§ÀÇ ±×·ì³Ñ¹ö°¡ 1Àε¥, id002ÀÇ ·¹ÄÚµå Áß ±×·ì³Ñ¹ö°¡ 1ÀÎ °Ô µü Çϳª ÀÖÀ¸¹Ç·Î ´ç÷!
ÀÌ·± ¾ê±âÀΰ¡ º¸±º¿ä.. (À̹ø¿£ Á¦´ë·Î ÀÌÇØÇß±æ.. ¤¾) ^^;; Á˼ÛÇÕ´Ï´Ù.