전체 글

SQL의 offset페이지 단위로 데이터를 가져올 때 offset과 limit 방식을 사용했습니다. offset으로 시작 위치를 정하고 limit 만큼 데이터를 가져오는 방식입니다. 하지만 offset에는 단점이 있습니다.  바로 데이터셋이 커지면 성능 저하 문제를 일으킬 수 있다는 것 입니다. 그 이유는 offsest 방식이 데이터의 처음부터 주어진 offset까지 모든 행을 읽고 그 다음부터 limit 만큼의 데이터를 반환하기 때문입니다. 이로 인해 처리해야 할 데이터가 많아질수록 효율이 떨어집니다. 이 부분을 해결하기 위해 offset 대신 where에 > 범위 검색과 between을 도입하 성능을 비교해보겠습니다.  Item, Brand 테이블 이번에 사용할 item과 brand 테이블 입니다. ..
설정 값프로젝트를 진행하다보면 설정 값이 필요합니다. 프로젝트에서 사용하는 설정 값들의 예시는 다음과 같습니다.데이터베이스 설정 서버 설정보안 설정로깅 설정메일 설정API 키 및 외부 서비스 연동페이지네이션 등등...이러한 설정 값은 Java 소스 코드가 아닌 설정 파일에서 따로 관리하면 얻는 이점이 있습니다.    설정 파일로 설정 값을 관리하는 이유설정 값을 자바 코드에서 분리하여 application.properties나 application.yml 파일로 관리하면 다음과 같은 장점이 있습니다. 관리와 보안이 좋아집니다. 설정 정보를 한 곳에 관리하여 유지 보수가 좋아지고 민감한 정보(비밀번호, API 키 등)가 소스코드에서 분리되어 보안이 강화됩니다.유연성과 확장성이 좋아집니다. 개발, 테스트, ..
문제 출저https://leetcode.com/problems/confirmation-rate/?envType=study-plan-v2&envId=top-sql-50   문제 풀이각 유저의 확인 비율을 구해야 합니다. 확인 비율은 확인(confirmed) / 전체 메일 입니다.  모든 유저를 나타내기 위해서 left join을 합니다. Singups, Confirmations 조인하여 user_id로 그룹화 합니다. 집계함수 sum과 조건문 if를 이용하여 confirmed의 갯수를 구합니다.count를 통해 전체 갯수를 구합니다.round를 통해 소수점 2자리를 표시하도록 합니다.    SQLselect s.user_id, round(sum(if(c.action = 'confirmed', ..
문제 출저https://school.programmers.co.kr/learn/courses/30/lessons/164668 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   문제 풀이USED_GOODS_BOARD B, USED_GOODS_USER U 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총 거래 금액을 조회하는 SQL문을 작성해야 합니다. 총 거래 금액을 기준으로 오름차순 정렬합니다.  두 개의 테이블을 B.WRITER_ID와 U.USER_ID로 조인을 맺습니다. 이때 B.STATUS = 'DONE' 을 하여..
문제 출저https://leetcode.com/problems/managers-with-at-least-5-direct-reports/description/?envType=study-plan-v2&envId=top-sql-50    문제 풀이5명 이상의 직속 부하가 있는 직원의 이름을 출력해야 합니다. Employee 테이블을 id와 managerId로 조인합니다.manager.id를 그룹화하고 having으로 5개 이상을 선택합니다.    SQL-- # 5명 이상의 직속 부하가 있는 직원의 이름을 출력한다. 이름이 중복될 수 있다. select manager.name from Employee as managerjoin Employee as employee on manager.id =..
문제 출저https://school.programmers.co.kr/learn/courses/30/lessons/299310 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   문제 풀이분화된 연도, 분화된 연도별 대장균 크기 편차, 대장균 개체의 ID룰 출력해야 합니다. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기 입니다.  서브쿼리를 통해 연도별로 가장 큰 대장균의 크기를 구합니다.이 서브쿼리와 테이블을 조인하여 연도별 대장균 크기의 편차를 구합니다.    SQLSELECT A.YEAR AS YEAR,..
문제 출저https://www.acmicpc.net/problem/13699    문제 풀이t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0)점화식이 다음과 같은 수열이 주어집니다. 이 수열에 n의 값을 구해야 합니다.  1차원 long 배열 dp를 생성하여 점화식을 저장합니다.    소스 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/*점화식https://www.acmicpc.net/problem/13699 */public class Main { static long dp[]; public static void main(String[..
문제 출저https://leetcode.com/problems/students-and-examinations/description/?envType=study-plan-v2&envId=top-sql-50   문제 풀이각 학생이 시험을 몇 번 참석했는지 구해야 합니다.  cross join으로 Students와 Subject를 연결시켜 각 학생이 시험을 참여한 모든 경우의 수를 구합니다.left join으로 Examinations와 연결합니다.group by로 student_id, subject_name 그룹화하여 count를 통해 갯수를 셉니다.order by로 student_id, subject_name 순서로 정렬시킵니다.   SQL-- select * -- from Students -- cross j..
문제 출저https://school.programmers.co.kr/learn/courses/30/lessons/298515 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   문제 풀이잡은 물고기 중 가장 큰 물고기의 길이를 cm를 붙여 출력합니다. MAX()를 통해 가장 큰 물고기의 길이를 구합니다.CONCAT()을 사용하여 cm을 붙여 출력합니다.  SQLSELECT CONCAT(MAX(LENGTH), 'cm') AS MAX_LENGTHFROM FISH_INFO
문제 출저https://leetcode.com/problems/employee-bonus/?envType=study-plan-v2&envId=top-sql-50   문제 풀이보너스가 1000 미만인 직원의 name, bonus를 출력해야 합니다. Employee 테이블에서 name을 Bonus 테이블에서 bonus를 가져와야 하므로 JOIN을 사용합니다.where 절을 사용하여 보너스가 1000 미만인 직원을 찾습니다. 이 때, null 또한 1000 미만이므로 포함시킵니다.   SQL# 보너스가 1000보다 적은 사람 # 보너스가 NULL인 사람이 있으니 NULL을 포함시킵니다. select e.name, b.bonusfrom Employee as e left join Bonus ..
문제 출저https://school.programmers.co.kr/learn/courses/30/lessons/293261 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   문제 풀이물고기 종류 별로 가장 큰 물고기의 ID, 물고기 이름, 길이를 출력해야 합니다. FISH_INFO 테이블에는 ID, FISH_TYPE, LENGTH, TIME이 있고 FISH_NAME_INFO 테이블에는 FISH_TYPE, FISH_NAME이 있습니다.  물고기 ID, 길이는 FISH_INFO에서 물고기 이름은 FISH_NAME_INFO에서 가져오고 JOIN을 통해 가져와야 ..
문제 출저https://leetcode.com/problems/average-time-of-process-per-machine/?envType=study-plan-v2&envId=top-sql-50   문제 풀이각 기계가 프로세스를 완료하는데 걸리는 평균 시간을 구해야 합니다. 완료하는데 걸리는 시간은 종료 시간에서 시작 시간을 뺀 값 입니다. (완료 시간 = 종료 시간 - 시작 시간)평균 시간은 소수점 이하 3자리로 표현합니다. s, ,e 테이블 2개를 조인합니다. machine_id, process_id 동일하게 조인합니다. s 테이블은 시작 시각을 나타내고 e 테이블은 종료 시간을 나타냅니다.avg(e.timestamp - s.timestamp)를 통해 평균을 구합니다. round를 통해 소수점 이..
너지살
너지살개발자