[SQL 레벨업] 10강 UNION이 필요한 경우
·
BOOK/SQL 레벨업
10강 | UNION이 필요한 경우 정리 UNION 사용할 수 밖에 없는 경우 ▶️ 여러개 테이블 검색 결과를 머지할 때 UNION 사용 좋은 점 좋은 인덱스를 사용한다. union을 사용하지 않을 시 풀스캔 발생 가능성 이전 블로그에 작성한 내용처럼 case도 이용이 가능하지만 필요없는 결합으로 성능이 낮아질 가능성이 있다. 결론 상황에 맞게 적절히 사용 예제문제 아래 테이블에서 date가 2013-11-01이고,flag가 True인 레코드를 검색 threeElements 테이블 기대값 풀이법 테이블 생성 1) UNION을 사용 코드 select `key`,name,date_1,flg_1,date_2,flg_2,date_3,flg_3 from example.threeElements where date_..
[SQL 레벨업] 9장 집계와 조건분기
·
BOOK/SQL 레벨업
이번 장에서는 집계와 조건분기를 효율적으로 진행하는 방법을 알아보려고 한다. 1. 집계 대상으로 조건 분기 예제 문제 Population 테이블이 존재하며, 그 지역의 이름과 각 성별마다의 인구 정보를 담고 있다. 원하는 결과 지역의 성별에 따른 인구수를 한 row에 확인할 수 있도록 할 것. 1️⃣ union을 사용한 방법 각 성별마다의 인구수를 구해, union으로 합쳐 하나의 테이블로 정리하는 방법이다. 아래의 쿼리를 통해 3가지 속성을 가진 하나의 테이블로 정리가 가능하다. select prefecture, pop as pop_men , null as pop_wom from example.population where sex = 1 union select prefecture, null as pop..
[SQL 레벨업] 8강 UNION을 사용한 쓸데없이 긴 표현
·
BOOK/SQL 레벨업
[SQL 레벨업] 7강. 조건 분기,집합 연산, 윈도우 함수,갱신 저번 글 7강에서 집합 연산을 공부하면서 UNION에 대해 정리하는 시간을 가졌었다. 그런데 이번 8강에서는 UNION을 단순히 생각나는대로 사용하지 않고, 어떻게 하면 효율적으로 UNION을 사용하는지 정리해볼 예정이다. 1. UNION 사용시 주의할 점 union을 사용할 때 주의해야할 점은 내부적으로 여러개의 select 구문을 실행한다는 것이다. 우리는 union으로 합친 쿼리들을 한번의 실행으로 받아드릴 수 있겠지만, 실제로 내부에서는 합친 select 구문만큼 실행되고 있기 때문에, 테이블에 접근하는 횟수가 많아져 I/O 비용이 크게 늘어난다. 그렇기 때문에 사용하기 전에 신중히 고려해서 사용해야 하며, UNION대신 CASE를..
최단경로
·
알고리즘
최단경로 특정 지점까지 가장 빠르게 도다아는 방법을 찾는 알고리즘 최단 경로 문제는 보통 그래프를 이용해 표현한다. 최단 거리 알고리즘은 다익스트라 ,플로이드 워셜,벨만 포드 알고리즘 등이 있다. 이 중에서 다익스트라 최단 경로와 플로이드 워셜 알고리즘이 코딩 테스트에서 가장 많이 등장하는 유형이다. 다익스트라 최단 경로 알고리즘 그래프에서 여러 개의 노드가 있을 때 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘이다 다익스트라 최단 경로 알고리즘은 기본적으로 그리디 알고리즘으로 분류된다. ‘가장 비용이 적은 노드’를 선택해서 임의의 과정을 반복하기 때문이다. 다익스트라 최단 경로 알고리즘 원리 출발 노드를 설정한다. 최단 거리 테이블을 초기화한다. 방문하지 않은 노드 중..
다이나믹 프로그래밍
·
알고리즘
다이나믹 프로그래밍 한 번 계산한 문제는 다시 계산하지 않도록 하는 알고리즘 다이나믹 프로그래밍으로 해결할 수 있는 대표적인 예시로는 피보나치 수열이 있다 피보나치 수열의 점화식은 다음과 같다 재귀함수를 이용해서 코드로 나타낼 수 있다 def fibo(x): if x == 1 or x ==2 : return 1 return fibo(x-1)+fibo(x-2) print(fibo(4)) 하지만 위와 같이 작성하면 f(n) 함수에 n이 커지면 커질수록 수행 시간이 기하급수적으로 늘어나기 때문에 심각한 문제가 생길 수 있다. 시간복잡도는 O(2ⁿ) 정도로 소요된다. 위의 코드를 다시 생각해보면 동일한 함수가 반복적으로 호출된다. 이미 한번 계산했지만, 계속 호출할 때마다 계산을 다시 한다. fibo(6)을 구..
이진탐색
·
알고리즘
순차 탐색 가장 기본 탐색 방법으로 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법 ⇒ 시간만 충분하다면 항상 원하는 데이터를 찾을 수 있다 , 다만 처음부터 순서대로 모두 탐색해야하기 때문에 시간복잡도는 O(N)이다 def sequential_search(n,target,array): for i in range(n): if array[i] == target: return i+1 input_data = input().split() n = int(input_data[0]) target = input_data[1] array = input().split() print(sequential_search(n,target,array)) # 입력 # 5 apple # b..
정렬
·
알고리즘
정렬 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말함 선택 정렬 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두번째 데이터와 바꾸는 과정을 반복한다. 숫자가 총 N개 있을 때 N-1번 반복하면 된다 연산 횟수는 N+(N-1)+(N-2)+ … +2 = (N² + N)/2 번이다. 따라서 시간 복잡도는 O(N²) 이므로 알고리즘 문제 풀이에 사용하기에는 느리다 array = [7,5,9,0,3,1,6,2,4,8] for i in range(len(array)): min_index = i # 앞에 있는 원소 인덱스 for j in range(i+1,len(array)): if array[min_index] > array[j]: # 현재 원소보다 크..
DFS / BFS
·
알고리즘
DFS와 BFS는 스택과 큐를 알아야만 한다. 스택 스택은 선입후출(FILO) 구조 또는 후입선출(LIFO) 구조이다. 파이썬에서 스택을 이용할 때에는 별도의 라이브러리를 사용할 필요가 없다. 기본 리스트에서 append()와 pop() 메서드를 이용해 스택 자료구조와 동일하게 동작시킨다. append() 메서드는 리스트의 가장 뒤쪽에 데이터를 삽입하고 pop() 메서드는 리스트의 가자 뒤쪽에서 데이터를 꺼낸다 stack = [] stack.append(5) stack.append(2) stack.append(1) stack.append(9) stack.pop() stack.append(4) stack.append(3) stack.pop() print(stack) # 최단 원소부터 출력 print(sta..