코딩테스트 연습 Python 개발자 찾기

문제
DEVELOPER_INFOS 테이블에서 Python 스킬을 가진 개발자의 정보를 조회하려 합니다. Python 스킬을 가진 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.
결과는 ID를 기준으로 오름차순 정렬해 주세요.

SELECT ID , EMAIL , FIRST_NAME , LAST_NAME
  FROM DEVELOPER_INFOS 
 WHERE SKILL_1 = 'Python'
    OR SKILL_2 = 'Python'
    OR SKILL_3 = 'Python'
ORDER BY ID;




취소되지 않은 진료 예약 조회하기
PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 
진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 
결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

APPOINTMENT 테이블 APNT_CNCL_YMD = 20220413 APNT_CNCL_YN = 'N' 취소 되지 않은 , MCDP_CD = 'CS' 흉부외과
환자랑 , 의사 LEFT JOIN으로

APPOINTMENT A
DOCTOR D
PATIENT P

SELECT A.APNT_NO, P.PT_NAME, P.PT_NO , A.MCDP_CD , D.DR_NAME , A.APNT_YMD
  FROM APPOINTMENT A 
  LEFT JOIN DOCTOR D
    ON A.MDDR_ID = D.DR_ID
  LEFT JOIN PATIENT P
    ON A.PT_NO = P.PT_NO
WHERE TO_CHAR(A.APNT_YMD,'YYYYMMDD') = '20220413'
  AND A.APNT_CNCL_YN = 'N'
  AND A.MCDP_CD = 'CS'
  ORDER BY APNT_YMD ASC

'SQL' 카테고리의 다른 글

[SQL] 프로그래머스 문제풀기 모음  (3) 2024.09.02
MySQL : mysql connection error  (0) 2024.06.18
[postgresql] 설치 및 GUI(TablePlus) 연동 - 1  (0) 2022.12.08

-- 테이블에서 희귀도 LEGEND 아이템들의 가격 총합

SELECT SUM(PRICE) AS TOTAL_PRICE FROM ITEM_INFO WHERE RARITY = 'LEGEND';



-- 코딩테스트 연습 JOIN 5월 식품들의 총매출 조회하기

SELECT A.PRODUCT_ID , A.PRODUCT_NAME , SUM(PRICE * AMOUNT) AS TOTAL_SALES
  FROM FOOD_PRODUCT A JOIN FOOD_ORDER B 
    ON A.PRODUCT_ID = B.PRODUCT_ID
 WHERE TO_CHAR(PRODUCE_DATE , 'YYYYMM') = '202205'
 GROUP BY A.PRODUCT_ID , A.PRODUCT_NAME
 ORDER BY TOTAL_SALES DESC , A.PRODUCT_ID;


 
--상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.

 SELECT A.FLAVOR 
  FROM FIRST_HALF A JOIN ICECREAM_INFO B
    ON A.FLAVOR = B.FLAVOR
    WHERE TOTAL_ORDER > 3000 AND INGREDIENT_TYPE = 'fruit_based'
    ORDER BY TOTAL_ORDER DESC;



--REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

SELECT B.FOOD_TYPE , B.REST_ID , B.REST_NAME , B.FAVORITES
  FROM (SELECT FOOD_TYPE , MAX(FAVORITES) FAVORITES FROM REST_INFO GROUP BY FOOD_TYPE) A
  JOIN REST_INFO B ON A.FOOD_TYPE = B.FOOD_TYPE
 WHERE A.FOOD_TYPE = B.FOOD_TYPE AND A.FAVORITES = B.FAVORITES
 ORDER BY FOOD_TYPE DESC;


다른 풀이

WITH Max_rest AS (
    SELECT REST_ID,
            REST_NAME,
            FOOD_TYPE,
            FAVORITES,
            RANK() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RANKING
    FROM REST_INFO
)
SELECT FOOD_TYPE , REST_ID , REST_NAME , FAVORITES
  FROM Max_rest
 WHERE RANKING = '1'
 ORDER BY FOOD_TYPE DESC


 
 CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
 

 SELECT CAR_ID, CAR_TYPE ,DAILY_FEE ,OPTIONS
  FROM CAR_RENTAL_COMPANY_CAR
 WHERE OPTIONS LIKE '%네비게이션%'
 ORDER BY CAR_ID DESC;




--FISH_NAME_INFO에서 물고기의 종류 별 물고기의 이름과 잡은 수를 출력하는 SQL문을 작성해주세요.
물고기의 이름 컬럼명은 FISH_NAME, 잡은 수 컬럼명은 FISH_COUNT로 해주세요.
--결과는 잡은 수 기준으로 내림차순 정렬해주세요.

 SELECT COUNT(1) AS FISH_COUNT , (SELECT A.FISH_NAME FROM FISH_NAME_INFO A WHERE A.FISH_TYPE = B.FISH_TYPE) AS FISH_NAME 
   FROM FISH_INFO B 
 GROUP BY B.FISH_TYPE 
 ORDER BY FISH_COUNT DESC;


 
 
 
--문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 
이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 
결과는 회원 ID를 기준으로 내림차순 정렬해주세요.

SELECT USER_ID, NICKNAME,
       CITY || ' ' || STREET_ADDRESS1 || ' ' || STREET_ADDRESS2 AS 전체주소,
       SUBSTR(TLNO, 1, 3) || '-' || SUBSTR(TLNO, 4, 4) || '-' || SUBSTR(TLNO, 8, 4) AS 전화번호
FROM USED_GOODS_USER A 
JOIN (SELECT WRITER_ID
        FROM USED_GOODS_BOARD
    GROUP BY WRITER_ID
      HAVING COUNT(1) >= 3) B ON A.USER_ID = B.WRITER_ID
ORDER BY USER_ID DESC;



MYSQL NVL 없음 IFNULL 또는 COALESCE

-- 문제 FISH_INFO 테이블에서 잡은 물고기 중 가장 큰 물고기의 길이를 'cm' 를 붙여 출력하는 SQL 문을 작성해주세요.

SELECT CONCAT(MAX(LENGTH) , 'cm') AS MAX_LENGTH
  FROM FISH_INFO;


  
  -- AIR_POLLUTION 테이블에서 수원 지역의 연도 별 평균 미세먼지 오염도와 평균 초미세먼지 오염도를 조회하는 SQL문을 작성해주세요. 이때, 평균 미세먼지 오염도와 평균 초미세먼지 오염도의 컬럼명은 각각 PM10, PM2.5로 해 주시고, 값은 소수 셋째 자리에서 반올림해주세요.
결과는 연도를 기준으로 오름차순 정렬해주세요.

DATE_FORMAT(YM,'%Y') AS YEAR , 문자열이 여서 답이 안된다고 함
  

  SELECT YEAR(YM) AS YEAR , -- 정수형이여서 가능
       ROUND(AVG(PM_VAL1),2) AS PM10 , 
       ROUND(AVG(PM_VAL2),2) AS `PM2.5` -- 특수문자 백틱 넣어서 ALIAS처리
  FROM AIR_POLLUTION  
 WHERE LOCATION2 = '수원'
GROUP BY YEAR
ORDER BY YEAR ASC;



-- ROOT 아이템을 찾아 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요.

SELECT A.ITEM_ID , A.ITEM_NAME 
  FROM ITEM_INFO A 
  JOIN ITEM_TREE B 
    ON A.ITEM_ID = B.ITEM_ID
 WHERE B.PARENT_ITEM_ID IS NULL;


 
-- 코딩테스트 연습 GROUP BY 부서별 평균 연봉 조회하기
-- HR_DEPARTMENT와 HR_EMPLOYEES 테이블을 이용해 부서별 평균 연봉을 조회하려 합니다. 부서별로 부서 ID, 영문 부서명, 평균 연봉을 조회하는 SQL문을 작성해주세요.
-- 평균연봉은 소수점 첫째 자리에서 반올림하고 컬럼명은 AVG_SAL로 해주세요.
-- 결과는 부서별 평균 연봉을 기준으로 내림차순 정렬해주세요.

SELECT A.DEPT_ID , A.DEPT_NAME_EN , ROUND(AVG(SAL),0) AS AVG_SAL
  FROM HR_DEPARTMENT A
  JOIN HR_EMPLOYEES B
    ON A.DEPT_ID = B.DEPT_ID
GROUP BY A.DEPT_ID , A.DEPT_NAME_EN
ORDER BY AVG_SAL DESC;



-- USED_GOODS_BOARD 테이블에서 2022년 10월 5일에 등록된 중고거래 게시물의 게시글 ID, 작성자 ID, 게시글 제목, 가격, 거래상태를 조회하는 SQL문을 작성해주세요. 거래상태가 SALE 이면 판매중, RESERVED이면 예약중, DONE이면 거래완료 분류하여 출력해주시고, 결과는 게시글 ID를 기준으로 내림차순 정렬해주세요.

SELECT BOARD_ID
      ,WRITER_ID
      ,TITLE
      ,PRICE
      ,DECODE(STATUS,'SALE','판매중','RESERVED','예약중','거래완료') AS STATUS
  FROM USED_GOODS_BOARD 
 WHERE TO_CHAR(CREATED_DATE , 'YYYYMMDD') = '20221005'
 ORDER BY BOARD_ID DESC;


 
--월별 잡은 물고기의 수와 월을 출력하는 SQL문을 작성해주세요.

잡은 물고기 수 컬럼명은 FISH_COUNT, 월 컬럼명은 MONTH로 해주세요.
결과는 월을 기준으로 오름차순 정렬해주세요.
단, 월은 숫자형태 (1~12) 로 출력하며 9 이하의 숫자는 두 자리로 출력하지 않습니다. 잡은 물고기가 없는 월은 출력하지 않습니다.

 SELECT COUNT(1) AS FISH_COUNT, MONTH(TIME) AS MONTH
  FROM FISH_INFO 
 GROUP BY MONTH(TIME)
 ORDER BY MONTH(TIME);

mysql이 중복으로 다운되어있었음

 

환경 변수 수정하면 됨

 - Postgresql 사용이유

1. 최다 SQL 기능 지원 

오라클도 많은 기능을 지원하는데 오라클 보다도 많고, 거의 제일 많은 기능을 지원함

2. 최대 SQL 표준 지원

3. NoSQL도 포함되어 있음( 확장 기능으로 제공 )

4. 대량 데이터 처리 가능

 

비용과 라인서스 측면에서 유리

 

일단 요정도...ㅎㅎ 사용해보면서 다른 DB하고 차별화 된 점을 느껴보고 정리...!

 

Server부터

Username까지는 Enter 치면 기본값으로 설정

 

\du 를 활용해서 내 정보 확인 가능

확인한 정보를 가지고 User에 기입 Password는 다운로드 당시 설정해뒀던 비밀번호 기입

 

새로운 db를 만들어 줄 것 단축키 Ctrl + K

 

세부적인건 따로 캡쳐 X

 

/* postgre / 1234 */

SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname = 'webdb'; /* 인코딩 확인 */

CREATE USER webdb WITH LOGIN PASSWORD '1234'; /* 계정 생성 */

select * from PG_SHADOW; /* 계정 목록 확인 */

ALTER USER webdb; /* 권한 부여 */

GRANT ALL PRIVILEGES ON DATABASE webdb TO webdb; /* webdb 에게 webdb 데이터베이스에 모든 권한 부여 */

 

+ Recent posts