[프로그래머스] 가격이 제일 비싼 식품의 정보 출력하기 | MySQL, 오라클
·
📝 Coding Test/SQL
문제가격이 제일 비싼 식품의 정보 출력하기풀이 1서브쿼리를 이용한 풀이입니다.MySQLSELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICEFROM FOOD_PRODUCTWHERE PRICE = (SELECT MAX(PRICE) PRICEFROM FOOD_PRODUCT);오라클SELECT *FROM FOOD_PRODUCTWHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);풀이 2가격을 내림차순으로 정렬하고, 최상위 로우를 뽑아내는 풀이입니다.MySQLSELECT * FROM FOOD_PRODUCTORDER BY PRICE DESC LIMIT 1;오라클SELECT * FROM ( SELECT * FROM FOOD..
[오라클] MERGE INTO
·
💻 CS/Database
MERGE INTO해당 값이 있으면 UPDATE하고 없으면 INSERT하는 구문입니다.만약에 테이블 하나만 가지고 작업을 할 경우, MERGE INTO 테이블 USING DUAL ~ 으로 사용하면 됩니다.예제melon_chart 테이블입니다.melon_chart_new 테이블입니다.melon_chart_new에 있는 데이터와 melon_chart에 있는 데이터를 중복되지 않게 합치고, 최신화를 시켜주고 싶다면 아래와 같이 쿼리문을 작성하면 됩니다.merge into melon_chart m1using melon_chart_new m2on (m1.singer = m2.singer and m1.song = m2.song)when matched then update set m1.ranking = m2.rank..
[오라클] WITH 구문
·
💻 CS/Database
WITH 구문ORACLE9i R2 이후, 사용 가능한 구문으로 WITH 구문은 이름이 부여된 서브쿼리 블록으로 인라인 뷰처럼 작동합니다.서브쿼리를 별도로 빼서 이름을 지어주는 것이라고 생각하면 됩니다.동일 쿼리블록이 반복적으로 사용되는 경우, 이름을 붙여 한 곳에 정의하고 재사용할 수 있습니다.자주 실행되는 경우 한 번만 parsing되고 실행 계획이 수립되므로 성능 향상에 좋습니다.예시아래와 비슷한 테이블에서 존재하지 않은 연도도 같이 뽑아내기 위해, WITH절을 업무에 사용했던 적이 있습니다.아래처럼 WITH구문을 이용해 존재하지 않는 연도도 포함하는 쿼리를 작성할 수 있었습니다.주의점여러 번 참조하는 경우는 아니었지만, WITH 구문을 사용했습니다.두 번이상 사용되는 WITH절은 결과값이 TEMP ..
[오라클] NULL과 공백
·
💻 CS/Database
중소기업 DB 직무 면접 봤었는데, 오라클에서 NULL을 구분할 수 있는지와 관련된 질문이 기술면접 질문 중 하나였습니다. 정답을 맞췄지만, 다시 정리하고자 포스팅합니다.요약하자면, 공백이 없는 ''은 NULL 처리하고, 공백이 있다면 문자열이기에 NULL 처리 되지 않습니다. 아래는 테스트 사진은 결과입니다.
원하는만큼의 데이터 가져오기 (오라클, MySQL)
·
📝 Coding Test/SQL
오라클ROWNUM을 활용하여 원하는만큼의 데이터를 가져올 수 있습니다.특정한 기준으로 정렬한 후, 원하는만큼의 데이터를 추출하기 위해서 서브쿼리를 사용합니다.예제 - 상위 n개 레코드SELECT NAMEFROM ( SELECT * FROM ANIMAL_INS ORDER BY DATETIME)WHERE ROWNUM MySQLLIMIT를 활용하여 원하는만큼의 데이터를 가져올 수 있습니다.예제 - 가장 큰 물고기 10마리 구하기SELECT ID, LENGTHFROM FISH_INFOWHERE LENGTH >= 10ORDER BY LENGTH DESC, IDLIMIT 10;
[프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 | 오라클
·
📝 Coding Test/SQL
문제대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기풀이SELECT TO_NUMBER(TO_CHAR(START_DATE, 'MM')) MONTH, CAR_ID, COUNT(*) RECORDSFROM CAR_RENTAL_COMPANY_RENTAL_HISTORYWHERE CAR_ID IN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE TO_CHAR(START_DATE, 'YYYYMM') >= '202208' AND TO_CHAR(START_DATE, 'YYYYMM') = 5 ) AND TO_CHAR(START_DATE, 'YYYYMM') >= '202208' AND TO_CHAR(START_DATE, 'YYYYMM') ..
[프로그래머스] 입양 시각 구하기(2) | 오라클
·
📝 Coding Test/SQL
문제입양 시각 구하기(2)풀이SELECT A.HOUR, COUNT(B.DATETIME) COUNTFROM (SELECT LEVEL - 1 AS HOUR FROM DUAL CONNECT BY LEVEL COUNT(*)을 하면 데이터가 없어도 1로 출력하기 때문에, COUNT(B.DATETIME)으로 작성했습니다.0부터 23을 가진 테이블을 만들어주기 위해 CONNECT BY(계층적 쿼리)를 사용하였습니다.참고오라클 순번 채번 CONNECT BY LEVEL 활용하기[Oracle] 오라클 CONNECT BY 사용법 (계층형 쿼리)
[프로그래머스] 년, 월, 성별 별 상품 구매 회원 수 구하기 | 오라클
·
📝 Coding Test/SQL
문제식품분류별 가장 비싼 식품의 정보 조회하기풀이SELECT TO_CHAR(B.SALES_DATE, 'YYYY') YEAR, TO_NUMBER(TO_CHAR(B.SALES_DATE, 'MM')) MONTH, GENDER, COUNT(DISTINCT A.USER_ID) USERSFROM USER_INFO A JOIN ONLINE_SALE B ON A.USER_ID = B.USER_IDWHERE GENDER IS NOT NULLGROUP BY TO_CHAR(B.SALES_DATE, 'YYYY'), TO_NUMBER(TO_CHAR(B.SALES_DATE, 'MM')), GENDERORDER BY 1, 2, 3;1자리 숫자의 달의 경우 앞의 0을 제거하기 위해, TO_NUMBER를 사용했습니다.중복되는 유저가..
[프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 | 오라클
·
📝 Coding Test/SQL
문제식품분류별 가장 비싼 식품의 정보 조회하기풀이SELECT CATEGORY, PRICE MAX_PRICE, PRODUCT_NAMEFROM FOOD_PRODUCTWHERE (CATEGORY, PRICE) IN ( SELECT CATEGORY, MAX(PRICE) FROM FOOD_PRODUCT WHERE CATEGORY IN ('과자', '국', '김치', '식용유') GROUP BY CATEGORY)ORDER BY MAX_PRICE DESC;서브쿼리를 활용하여 문제를 해결했습니다.