2024-02-14 AI 코딩 TIL

2024. 2. 14. 20:50· 코딩 교육 TIL
오늘도 기운차게 시작을 해봅시다

 

계속해서 SQL문제를 풀이를 하며 새로 깨닫게 되거나 틀려서 문제가 되었던 점을 기록해보겠습니다.

 


 

 

3개의 테이블을 합치는 방법으로 JOIN 밑으로 다시 조인은 넣어주어서 합쳐줄 수 있으며 각 테이블의

공통된 내용을 찾아서 맞추어 주어야 한다,

 

-- 코드를 입력하세요
SELECT A.APNT_NO, B.PT_NAME, A.PT_NO, A.MCDP_CD, C.DR_NAME, A.APNT_YMD
FROM APPOINTMENT A 
        INNER JOIN PATIENT B ON A.PT_NO = B.PT_NO 
        INNER JOIN DOCTOR C ON A.MDDR_ID = C.DR_ID
WHERE C.MCDP_CD = 'CS' AND APNT_YMD LIKE '2022-04-13%' AND A.APNT_CNCL_YN = 'N'
ORDER BY APNT_YMD

특정일 기준 상태 파악하기


2022-10-16 일 기점으로 대여중인지 아닌지를 판단하는 방법은 쉬웠다
CASE문을 사용하여 기간에 맞추어 조건을 걸어주면 되는 것이었지만

처음에는 RANK 함수로 최근 대여상황을 판단하여하면 될 줄 알았으나

문제는 현시점의 대여 가능 유무가 아닌 2022-10-16 시점에 대여가 가능했는지를 따지는 것이기 때문에 
그 시점 이후에 더욱 쌓여 버린 데이터에 의해서 설정하는 것이 매우 난관이었다

그렇기에 CASE문으로 일정 기간에 대여중인지 아닌지를 판단을 하고 모든 각차종 중에서 대기 중이 하나라도 있는 경우에는
대여중이라고 표시를 해야 하며 하나도 없을 경우에는 대여가능이라는 표시를 해야 한다.

다행히도 경우의 수가 2개밖에 없었지라 MAX 값을 이용해서 값들 중에
가장 큰 값을 가져오면 되는 방식으로 사용을 하면 되었다.

 

-- 코드를 입력하세요
SELECT CAR_ID,
        MAX (CASE WHEN START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' THEN '대여중'
             ELSE '대여 가능'
             END) AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
GROUP BY 1
ORDER BY 1 DESC

 

MAX를 사용하는 것이 아니라 내용 중 대여중이라는 글자를 인식을 해서 판단을 해주는 방법을 찾으면

여러 가지 조건에서도 다양하게 이용을 할 수 있을 것 같다.


 

-- 코드를 입력하세요
SELECT A.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) SCORE
FROM REST_INFO A LEFT JOIN REST_REVIEW B ON A.REST_ID = B.REST_ID
WHERE ADDRESS LIKE '서울%' AND REVIEW_SCORE IS NOT NULL
GROUP BY 2
ORDER BY SCORE DESC, FAVORITES DESC

 

ROUND 명령어는 앞에 넣을 숫자를 넣고 , 를 찍은 뒤 뒤에 몇 번째까지 소수점을 남길 것인지 표기를 해준 면 된다.


 

DATE 차이 계산법
SELECT CAR_ID, AVERAGE_DURATION
FROM
(
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE,START_DATE)+1), 1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
GROUP BY 1
ORDER BY 2 DESC, 1 DESC
)A
WHERE AVERAGE_DURATION >= 7

위에서 보다시피

DATEDIFF(END_DATE, START_DATE)+1

마지막에 +1을 붙여주는데 날짜계산을 예를 들어

1일에서 10일까지를 생각하면 1을 포함해야 하기에 총 10일로 계산을 하지만

공식으로 계산이 되면 10-1이 되어서 9일로 계산이 된다.

그렇기에 +1을 넣어주어 우리가 원하는 값을 얻을 수 있다.


 

HAVING 이용하여 필터링하기

일반적인 칼럼을 필터링하기 위해서는 WHERE BY 절을 이용하여 내가 원하는 값만 가져와서 사용할 수 있었지만

SUM, AVG, COUNT와 같이 합쳐서 그룹을 만들어준 값을 기준으로 필터링을 하고 싶을 때에는 HAVING을 사용하여 

내가 원하는 값에 사용 할 수 있다.

-- 코드를 입력하세요
SELECT ID, NAME, HOST_ID
FROM PLACES
WHERE HOST_ID IN ( SELECT HOST_ID
                  FROM PLACES 
                  GROUP BY 1
                  HAVING COUNT(1) >= 2
                 )
ORDER BY 1

2개 이상 주문한 사람의 주문내역을 본다 같이 어떤 기준이 되는 값을 가지는 사람의 모든 데이터 값을 보기 위해서는 

그룹을 시켜 필터링을 하고 다시 그룹을 풀어주어야 하지만 한번 그룹이 되어버리면 풀어버릴 수 없기 때문에 

서브쿼리를 만들어주고 거기에서 내가 원하는 그룹만 HAVING으로 찾아내준다음

WHERE BY로 각 칼럼을 찾아내어 주면 된다.

 

 

다른 칼럼에서 조건 맞추어서 찾는 법


그림처럼 칼럼이 서로 다른 곳에서 두개 이상의 조건을 맞추어야 할 때에도 HAVING을 사용 할 수 있다.

-- 코드를 입력하세요
SELECT  CART_ID
FROM CART_PRODUCTS 
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY 1
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY 1

 

 


 

UNION을 이용한 다른 테이블 속 컬럼 합치기

그림과 같이 테이블 명은 다르지만 동일한 컬럼을 사용할 때 같은 컬럼내용을 합쳐주기 위해서 UNION을 사용하여 합쳐줄수 있다.

 

-- 코드를 입력하세요
SELECT FLAVOR
FROM 
(
SELECT *
FROM JULY
UNION
SELECT *
FROM FIRST_HALF    
)A
GROUP BY 1
ORDER BY SUM(TOTAL_ORDER) DESC
LIMIT 3

 

내용이 합쳐졌기 때문에 합을 계산하기에 편리해진다.

 


 

 

-- 코드를 입력하세요
WITH USED AS (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
    GROUP BY CAR_ID
    HAVING COUNT(1) >= 5
)

SELECT MONTH(START_DATE) 'MONTH', CAR_ID, COUNT(1) 'RECORDS'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
        AND CAR_ID IN (SELECT CAR_ID FROM USED)
GROUP BY 1, 2
ORDER BY 1, 2 DESC

WITH을 이용하여 앞에 먼저 선언을 해서 서브 쿼리를 사용할 때 적은 글자로 사용할 수 있으며

다른 곳에서도 쉽게 사용이 가능하다


 

GIT 강의 

기본적인 리눅스 명령어를 배워야 한다.
(자동완성 적용)

pwd : 현재 작업 중인 파일 경로 표시

ls (list) : 폴더 및 파일을 표시해 준다

ls -a (list all) :  숨긴 폴더까지 모두 표시

cd 폴더명 (change diretory) : 폴더 선택해서 이동

cd.. : 상위 경로 가기
cd../../하면 두번도 가능

cd . : 현재 경로

mkdir(Make Diretory) 폴더명 : 현재 경로에서 빈 폴더를 만들어

ll : 파일 속성 보기

touch 파일명 : 빈 파일 생성


git : 코드 변경점을 기록한다.
버전 관리 도구

git hub : 백업 협업을 위한 도구


 

git init : 개발 프로젝트를 시작 시 한 번만 하면 ok

해당폴더 확인 필수

 

git status : 현재 작업 중인 상태를 표시

빨간 글씨 = 저장이 되어있지 않음

녹색글씨 = 저장준비 스테이지위에 올라감

흰색 글씨 = 저장됨

 

 

git add & commit : 코드를 저장

git add 파일명 

git commit -m "메시지 작성" :메시지 달아주기

 

git add.  : 현재 경로에 있는 모든 파일

 

 

git log : commit 저장내역 확인

 

git checkout (ID) : 과거 커밋 기록으로 넘어갈 수 있다.

 

git checkout master : 현재 작업 중인 상태로 복귀


github 백업하기

git remote add origin https://github.com/billyhyunjun/github-test.git
git branch -M main
git push -u origin main

 

git push : 백업하기

 

git remote add origin <github주소> : 주소에 별명 부여

- 별명 주소 꺼내는 법 = git remote -v

 

git branch -M main : 브랜치명 변경

 

git push -u origin main : 색칠된 부분이 생략할 수 있게


팀원과 공유하기

 

github에 팀원등록시키기


팀원이 받아오기 

 

git clone <github 주소>. : 허브에서 가져오기".

 

 git pull : 변경한 코드 가져오고 합치기

 


충돌해결하기

 

 


다음 회차에 배우게 될 내용

 

 

 

'코딩 교육 TIL' 카테고리의 다른 글

2024-01-23 AI 코딩 TIL  (0) 2024.02.16
2024-01-22 AI 코딩 TIL  (0) 2024.02.16
2024-02-16 AI 코딩 TIL  (1) 2024.02.16
2024-02-15 AI 코딩 TIL  (0) 2024.02.15
2024-02-13 AI 코딩 TIL  (1) 2024.02.13
'코딩 교육 TIL' 카테고리의 다른 글
  • 2024-01-22 AI 코딩 TIL
  • 2024-02-16 AI 코딩 TIL
  • 2024-02-15 AI 코딩 TIL
  • 2024-02-13 AI 코딩 TIL
HyunjunPark
HyunjunPark
하루하루 배워가는 코딩에 대하여 내가 배우는 것 들을 정리하여 보자
HyunjunPark
박현준의 코딩 교육
HyunjunPark
전체
오늘
어제
  • 분류 전체보기 (154)
    • 코딩 정리함 (18)
    • 코딩 교육 WIL (9)
    • 코딩 교육 TIL (98)
    • 프로젝트 과제 (10)
    • QA교육 (11)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 스파르탄 AI 코딩 교육일지 작성 블로그입니다.

인기 글

태그

  • 부트캠프솔직후기
  • 국비지원부트캠프
  • 내일배움캠프
  • SQL 명령문
  • 코딩
  • 스파르타코딩
  • 취업부트캠프
  • 내일배움캠프후기
  • mysql

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
HyunjunPark
2024-02-14 AI 코딩 TIL
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.