SQL

SQL/공부

9. Window Function

Window Functionwindow function은 전체 테이블이 아닌 분석하고 싶은 작은 테이블을 연산의 대상으로 삼는다 (어느 특정 컬럼 안에서 특정를 연산)* 전체 테이블에서도 사용 가능하지만, 보통의 경우 전체 테이블을 사용하고 싶으면 집계 함수를 바로 쓰는게 일반적윈도우 함수 지정 범위에게 윈도우 함수를 적용하겠다SELECT  WINDOW함수 (컬럼)  OVER  ( )                   윈도우 함수            ~에게                윈도우 함수 지정 범위* 부분은 생략 가능* OVER : 적용 대상을 정해줌행을 분할 : PARTITION BY            (Group By와 같은 역할)행을 정렬 : ORDER BY                 ..

SQL/문제

[프로그래머스] 재구매가 일어난 상품과 회원 리스트 구하기

문제 풀이SELECT USER_ID, PRODUCT_IDFROM ONLINE_SALEGROUP BY USER_ID, PRODUCT_IDHAVING COUNT(USER_ID) > 1ORDER BY USER_ID, PRODUCT_ID DESC 셀프 조인으로 푼 다른 코드도 있던데, 개인적으로 해당 문제는 having절을 사용하는게 가장 깔끔한 거 같다. 해당 문제는 group by를 하고 조건을 줘서 세어주는 거니까 메인 쿼리에서 해결이 가능하다.having절은 그룹화된 집계 결과에서 조건식을 적용할 때 사용하는데 having을 사용할 때는 대상이 무엇인지를 봐야한다. 이 문제에서 두개 이상이여야하는 게 뭘까? 바로, USER_ID 나 PRODUCT_ID 이다.따라서 having 절에 둘중 하나로 필터를 걸..

SQL/문제

[프로그래머스] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기

문제 풀이SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARSFROM CAR_RENTAL_COMPANY_CARWHERE (OPTIONS LIKE '%통풍시트%') OR (OPTIONS LIKE '%열선시트%') OR (OPTIONS LIKE '%가죽시트%')GROUP BY CAR_TYPEORDER BY CAR_TYPE SELECT *을 찍어보면 아래와 같이 options 컬럼에 자동차 옵션이 쭉 써져있다.따라서, where(options like '%통풍시트%') or ( options like '%통풍시트%')  or ( options like '%통풍시트%') 로options 안에 통풍시트, 열선시트, 가죽시트가 포함되는 컬럼을 필터링 해줬다. * LIKE : '%a%..

SQL/문제

[프로그래머스] 중성화 여부 파악하기

문제 풀이SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O' WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O' ELSE 'X' END AS '중성화'FROM ANIMAL_INSORDER BY ANIMAL_ID CASE WHENcase when 역시 if-else 처럼 조건을 지정해줄 때 사용해주는 구문이다. CASE WHEN 조건1 THEN 조건1의 결과값           WHEN 조건2 THEN 조건2의 결과값           ELSE 조건이 충족되지 않을 때의 결과값           END  * CASE WHEN 구문은..

SQL/문제

[프로그래머스] 흉부외과 또는 일반외과 의사 목록 출력하기

문제 풀이SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') as HIRE_YMDFROM DOCTORWHERE MCDP_CD IN ('CS' , 'GS')ORDER BY HIRE_YMD DESC, DR_NAME DATE_FORMAT해당 문제에서 알아야할 함수는 DATE_FORMAT 함수이다.항상 느끼는데 문제가 아무리 쉬어도 맨 처음 해야할 건 SELECT * FROM 테이블을 해서 원본 데이터 값이 어떻게 되어있는지 보는 것임!! 해당 데이터로 SELECT * 을 찍어보면 HIRE_YMD가 2011-03-01 00:00:00 이런식으로 되어 있기에 그냥 제출하면 틀림* 여담으로 프로그래머스 데이터는 날짜를 00:00:00 까지 나오게 한..

SQL/문제

[프로그래머스] 경기도 위치한 식품창고 목록 출력하기

문제 풀이SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IF(FREEZER_YN IS NULL, 'N', FREEZER_YN) AS FREEZER_YNFROM FOOD_WAREHOUSEWHERE WAREHOUSE_NAME LIKE '%경기%'ORDER BY WAREHOUSE_ID IF~ELSE 조건문조건문 지정으로는 CASE WHEN과 IF~ELSE가 있는데 CASE WHEN은 다른 문제에서 나오므로 IF~ELSE만 IF ( 조건문, 참일때 값, 거짓일 때 값) 즉 해당 문제에서는 FREESER가 NULL일때만 N으로 표현해 달라 했으므로 SELECT문에IF(FREEZER_YN IS NULL, 'N', FREEZER_YN)IF (FREEZER_YN IS N..

SQL/공부

8. 서브 쿼리

서브 쿼리SELECT 문 안에 다시 SELECT 문이 기술된 쿼리단일 SELECT 문 사용만으로는 안되는 복잡한 조건식을 만들 때 사용다른 테이블에서 데이터 값을 조회한 후 조건으로 사용할 때 사용서브쿼리 규칙서브 쿼리는 괄호를 묶어서 사용단일행 연산자 또는 다중행 연산자로 서브쿼리 연결서브 쿼리 실행 후 메인 쿼리 실행여러 서브 쿼리를 중첩해서 사용 가능 단일 행 서브 쿼리서브쿼리 SELECT 문에서 단일 행 결과를 메인 쿼리에 전달WHERE에 사용되는 열의 개수와 데이터 타입 일치 필요단일 행 연산자 사용SELECT first_name, last_nameFROM customerWHERE email = (SELECT email FROM customer WH..

SQL/공부

7. 조인 연산

조인 연산두개 이상의 테이블을 서로 연결하는데 사용되는 기법테이블들은 특정 규칙에 따라 서로 상호 관계를 가짐조인 종류CROSS JOIN공통되는 컬럼없이 조인 조건이 없어서 모든 데이터가 조회# address 수 * city 수 만큼의 결과값이 나옴SELECT address, cityFROM address, city INNER JOIN조인하는 테이블에서 조인 조건이 일치하는 것만 조회 # 방식1SELECT address, district, cityFROM address, cityWHERE address.city_id = city.city_id# 방식2SELECT address, district, cityFROM address AS a INNER JOIN city AS C ON a.city_id = c...

- MJ -
'SQL' 카테고리의 글 목록 (2 Page)