[MySQL] RECURSIVE 재귀 쿼리
·
코테/정리
문제를 풀던 도중 재귀 쿼리를 사용해야 하는 문제가 나왔다. JAVA로는 재귀를 많이 구현해 봤는데, MySQL로 쿼리 짤 때는 사실 재귀를 많이 사용은 안 하는 것 같다. WITH RECURSIVE (재귀)WITH RECURSIVE TABLE AS( SELECT 1 AS i UNION ALL SELECT (i+1) AS i FROM TABLE WHERE i 재귀 쿼리를 사용하면 반드시 UNION 을 사용해줘야 한다. 재귀 쿼리를 만드는 순서1. WITH RECURSIVE 가상테이블명(= 결과 테이블) 을 지정해준다.WITH RECURSIVE TABLE AS( ... )2. 초기 조건을 설정해준다. WITH RECURSIVE TABLE AS( SELECT 1..
[JAVA] 정규식 표현으로 문자열 비교하기
·
코테/정리
정규표현식을 사용해서 마스킹되어있는 문자와, 유저 ID가 일치하는지 아닌지 확인해볼 수 있다. 예를들어 유저 ID가 dropdew(userid)이고, 마스킹되어있는 문자가 dr**pd*w(banid)라고 한다면*의 개수를 제외한 나머지 문자의 일치 개수가 같으면 같은 문자라고 볼 수 있을 것이다. String tmp = banid.replace("*", "");int num = banid.length();int cnt = 0;for(int i=0; i 이런 방법을 사용해서 *을 제외한 나머지 문자가 다 같은 경우인지 체크해줘도 되지만, 정규표현식을 사용해서 확인할 수 있는 방법이 있다.  정규식 표현에서 '.'은 임의의 문자를 의미한다.즉, dr**pd*w를 dr..pd.w로 바꾸게 된다면, 임의의 문자..
[JAVA] 유클리드 호제법 (최소공배수, 최대공약수)
·
코테/정리
유클리드 알고리즘(Euclidean Algorithm) 2개의 자연수의 최대공약수(GCD)를 구하는 알고리즘을 말한다. 비교 대상인 두 개의 자연수 x와 y에서  (x>y)x를 y로 나눈 나머지를 r이라고 했을 때 GCD(x, y) = GCD(y, r) 을 반복해준다.재귀를 돌다가 r이 0이 될 때 y가 최대공약수.  1) 최대공약수static int GCD(int x, int y) { if(y == 0) { return x; } else { return GCD(y, x % y); }}  2) 최소공배수 두 자연수 x와 y의 최대공약수가 G, 최소공배수가 L 일 때,x = a*G , y = b*G라고 하면,L = a*b*G이고, x*y = L*G 이다.즉 두 자연수 x와 y의 곱은 최대공약수 G와 최..
[MySQL] SUBSTR() 사용해서 문자열 뒤에서 부터 자르기
·
코테/정리
SUBSTR()함수에서 시작 지점을 -로 지정해주면 문자열 뒤에서부터 자를 수 있다.HELLO-5-4-3-2-1 SUBSTR(데이터, 시작 지점, 개수);HELLOSUBSTR("HELLO", -1, 1);-- 답: OSUBSTR("HELLO", -1, 5);-- 답: HELLO
[MySQL] CONV함수 사용해서 진수 변환하기
·
코테/정리
CONV함수는 2진수를 10진수로, 10진수를 16진수로 ... 바꾸는 함수를 말한다.진법 데이터 형변환을 한다. (16진수, 10진수, 8진수, 2진수) CONV(데이터, 원본 진법, 변환할 진법);CONV(10, 10, 2)-- 10진수에서 2진수로 변경-- 답: 1010CONV(100, 2, 10)-- 2진수에서 10진수로 변경-- 답: 4
[MySQL] RANK 함수
·
코테/정리
만약 [STUDENTS]라는 테이블이 존재할 때, RANK함수별 어떻게 결과가 나타나는지 확인해보자. ID NAME AGE SCORE 1 김바닐라 18 76 2 이포도 15 95 3 조망고 14 83 4 박딸기 19 83 1. ROW_NUMBER() : 결과 집합 내의 각 행에 고유 번호를 할당. SELCT ID, NAME, AGE, SCORE, ROW_NUMBER() OVER(ORDER BY SCORE DESC) AS GRADE_RANK FROM STUDENTS; ID NAME AGE SCORE GRADE_RANK 1 김바닐라 18 76 4 2 이포도 15 95 1 3 조망고 14 83 2 4 박딸기 19 83 3 2. RANK() : 동일한 값을 가진 행에 대해 동일한 순위를 사용한다. 동일한 값을 ..
[코테 대비] BFS/DFS 정리 + 차이점
·
코테/정리
[코딩테스트 대비] DFS, BFS 정리 DFS, BFS 정리 DFS, BFS는 그래프에 속하는 알고리즘이다. 코딩테스트에서 경로를 찾는 문제에서 많이 출제가 된다. DFSRoot Node 혹은 다른 임의의 Node에서 다음 분기(Branch)로 넘어가기 전에 해당 분기 developer-mac.tistory.com DFS, BFS의 설명, 차이점 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며,그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하 velog.io 이해가 쏙쏙 되게끔 잘 적어주셔서.. 나도 잊어버리지 않게 메모! 유익한 정보 감사합니다 😄 DFS(깊이 우선 탐색) 루트 노드(혹은 다른 임의의 노드..
[MySQL] GROUP BY 1
·
코테/정리
SELECT a.PRODUCT_CODE AS PRODUCT_CODE, SUM(b.SALES_AMOUNT*a.PRICE) AS SALES FROM PRODUCT a JOIN OFFLINE_SALE b ON a.PRODUCT_ID = b.PRODUCT_ID GROUP BY 1 ORDER BY SUM(b.SALES_AMOUNT*a.PRICE) DESC, a.PRODUCT_CODE; GROUP BY 1 = 이름에 관계 없이 첫번째 열로 그룹화 하는 것을 의미 (ORDER BY에서도 동일하게 사용 가능함) 위의 문제에서는 GROUP BY a.PRODUCT_CODE 나 b.PRODUCT_CODE를 사용해서도 해결 가능
[MYSQL] 중복제거한 데이터 개수 카운트하기
·
코테/정리
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL; SELECT COUNT(DISTINCT 중복제거할 칼럼) FROM 테이블명 WHERE 조건; 처음에 SUM(COUNT(NAME))을 사용하면 COUNT해서 걸러낸 개수를 집계함수 SUM으로 합칠 수 있을 것 같았다. GROUP BY로 NAME을 묶으면 중복제거 되니까 SUM으로 합치면 되지 않을까 ? 했는데 이또한 실패 고민하다가 DISTINCT로 중복제거한 NAME을 넣는다면 어떨까 싶었다
[MYSQL] JOIN(INNER JOIN, OUTER JOIN)
·
코테/정리
JOIN 이란? 두 테이블을 묶어 하나의 테이블을 만드는 것. 서로 다른 테이블에서 정보를 가져올 때 JOIN을 사용해준다. 1. INNER JOIN 보통 JOIN 한다고 할때 INNER JOIN을 뜻한다. SELECT FROM INNER JOIN ON [WHERE 검색조건] * INNER JOIN이 아니라 그냥 JOIN을 써도 INNER JOIN으로 인식한다. SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER FROM FIRST_HALF A JOIN ICECREAM_INFO B ON A.FLAVOR = B.FLAVOR GROUP BY INGREDIENT_TYPE ORDER BY SUM(TOTAL_ORDER); GROUP BY 로 INGREDIENT_TY..