목록Data Engineering (24)
zimslog
프로그래머스 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 1. 처음 정답 코드WITH PLIST AS (SELECT *FROM CAR_RENTAL_COMPANY_CAR CWHERE C.CAR_TYPE IN ('세단','SUV') AND C.CAR_ID NOT IN (SELECT H.CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H WHERE NOT (END_DATE '2022-11-30')) ) SELECT L.CAR_ID AS CAR_ID, L.CAR_TYPE AS CAR_TYPE, ROUND(L.DAILY_FEE*30..
SQL 튜닝 - 쿼리 최적화 옵티마이저가 스토리지 엔진으로부터 데이터를 가져오는 과정에서 성능을 개선하고 싶다면 두 가지 방법이 있다. 1. 읽어오는 데이터의 양을 줄이거나 2. 데이터를 읽는 속도를 높이거나 이번 포스팅에서는 데이터 양을 줄이고, 읽는 속도는 높일 수 있게 쿼리를 작성하는 방법에 대해 알아보겠다. 1. SELECT시 불필요한 컬럼, 행 제거SELECT * 를 통해 전체 컬럼을 불러오는 것은 좋지 않다.컬럼명을 지정해서 필요한 컬럼만 조회하도록 해야한다. 또 필요한 데이터만 LIMIT로 제한해서 가져오는 것이 좋다. 2. 적절한 조건절 사용마찬가지로 WHERE절과 같은 조건절을 통해 읽어오는 데이터를 줄여야 한다. 이 때 조건절 안에 함수, 형변환, 계산 등을 사용하는 것은 ..
1. 최적화 전 코드 (서브쿼리 사용)SELECT N, CASE WHEN P IS NULL THEN 'Root' WHEN N NOT IN (SELECT DISTINCT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf' ELSE 'Inner' END AS VNFROM BSTORDER BY N WHERE P IS NOT NULL : 없을 경우 NOT IN 에 NULL이 포함되어 모든 결과가 FALSE/UNKNOWN으로 처리됨서브쿼리와 DISTINCT 함수 존재: 엔진/옵티마이저에 따라 서브쿼리가 반복 시행될 수 있음: DISTINCT도 정렬/해시 연산으로 비용이 듬 2. 서브쿼리를 JOIN 으로 대체SEL..
https://school.programmers.co.kr/learn/challenges?order=recent&levels=4&languages=mysql 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr 1. 특정 세대의 대장균찾기SELECT A.IDFROM ECOLI_DATA AJOIN ECOLI_DATA BON A.PARENT_ID = B.IDJOIN ECOLI_DATA CON B.PARENT_ID = C.IDWHERE ISNULL(C.PARENT_ID)ORDER BY ID 2. 연간 평가점수에 해당하는 평가..
https://school.programmers.co.kr/learn/challenges?order=recent&languages=mysql&page=1&levels=3 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr 1. 대장균의 크기에 따라 분류하기 2SELECT A.ID, IF(PCT 2. 대장균의 크기에 따라 분류하기 1SELECT ID, IF(SIZE_OF_COLONY 3. 대장균들의 자식의 수 구하기SELECT A.ID, IF(ISNULL(B.CHILD_COUNT), 0, B.CHILD_COUN..
https://school.programmers.co.kr/learn/challenges?order=recent&levels=2&languages=mysql 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr 11. 재구매가 일어난 상품과 회원 리스트 구하기 (GROUP BY, HAVING)SELECT USER_ID, PRODUCT_IDFROM ONLINE_SALEGROUP BY USER_ID, PRODUCT_IDHAVING COUNT(*) > 1ORDER BY USER_ID ASC, PRODUCT_ID DESC 1..
https://school.programmers.co.kr/learn/challenges?order=recent&levels=2&languages=mysql 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr 1. 부모의 형질을 모두 가지는 대장균 찾기 (비트 연산)SELECT A.ID, A.GENOTYPE, B.GENOTYPE AS PARENT_GENOTYPEFROM ECOLI_DATA AJOIN ECOLI_DATA BON A.PARENT_ID = B.IDWHERE A.GENOTYPE & B.GENOTYPE = B...
https://school.programmers.co.kr/learn/challenges?order=recent&levels=1&languages=mysql 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr 1. 특정 형질을 가지는 대장균 찾기 (비트 연산)SELECT COUNT(ID) AS COUNTFROM ECOLI_DATAWHERE (GENOTYPE&2 = 0) AND (GENOTYPE&1 = 1 OR GENOTYPE&4 = 4) 2. 가장 큰 물고기 10마리 구하기 (ORDER BY, LIMIT)SELEC..
1. Department Top Three Salaries //각 부서마다 연봉 top3 SELECT D.Name as Department, E.Name as Employee, E.Salary as Salary FROM Department D JOIN ( SELECT DepartmentId, Name, Salary, RANK() OVER (PARTITION BY DepartmentId ORDER BY Salary DESC) as rank FROM Employee WHERE rank = "2013-10-01" AND Request_at =100 and b.salary >= 100 and c.salary > =100 order by visit_date 4. Game Play Analysis 5 //해당 날짜..
11. Activity Participant SELECT activity FROM Friends GROUP BY activity HAVING COUNT(*) != (SELECT COUNT(*) FROM Friends GROUP BY activity ORDER BY COUNT(*) ASC LIMIT 1) AND COUNT(*) != (SELECT COUNT(*) FROM Friends GROUP BY activity ORDER BY COUNT(*) DESC LIMIT 1) 12. Number Of Trusted Contacts of a Customer SELECT invoice_id, customer_name, price, COUNT(contact_email) as contacts_cnt, sum(IF(c..