https://www.hackerrank.com/challenges/print-prime-numbers/problem?isFullScreen=true
1000보다 작거나 같은 모든 소수를 출력하는 쿼리를 작성하기
결과를 한 줄에 인쇄하고 "&"를 구분 기호로 사용한다
prime number(소수) : 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수
<GROUP_CONCAT 함수>
1) GROUP_CONCAT은 My SQL에서 GROUP BY로 문자열을 합칠 때 사용한다
2) 사용방법
기본 : GROUP_CONCAT(대상컬럼)
구분자 변경 : GROUP_CONCAT(대상컬럼 SEPARATOR '구분자')
문자열 정렬 : GROUP_CONCAT(대상컬럼 ORDER BY 대상컬럼)
재귀문을 사용하여 2~ 999까지 숫자를 생성한다
SELECT GROUP_CONCAT(A.NUM SEPARATOR '&'): 하나의 문자열로 구분하고 '&'로 나눠준다
WHERE 절을 사용하여 소수가 아닌 수를 제외한다
-A.NUM % B.NUM = 0 : A.NUM과 B.NUM의 나눈 나머지가 0이면 소수가 아니다.
-A.NUM != B.NUM: 같은 숫자끼리 나누면 무조건 나머지가 0이 나온다. 그래서 같은 숫자는 제외해야한다.
WITH RECURSIVE CTE AS (
SELECT 2 AS NUM
UNION ALL
SELECT NUM + 1
FROM CTE
WHERE NUM < 1000
)
SELECT GROUP_CONCAT(A.NUM SEPARATOR '&')
FROM CTE A
WHERE NOT EXISTS(
SELECT B.NUM
FROM CTE B
WHERE A.NUM % B.NUM = 0
AND A.NUM != B.NUM
)