반응형

반응형

24.12.22 

SELECT ..24.12.25 (정답률 70%대 까지)

SUM.MIX.MIN  .. 24.12.20 (정답률 70%대 까지)

 

 

SQL . GROUP BY 1 LV 문제풀이시작

반응형

'필기ㆍ코테 공부 > 코테' 카테고리의 다른 글

코딩테스트 일기 SQL ...(6)  (1) 2025.01.19
코딩테스트 일기 SQL ...(5)  (1) 2025.01.05
코딩테스트 일기 SQL ...(4)  (0) 2025.01.01
코딩테스트 일기 SQL ...(3)  (0) 2024.12.29
코딩테스트 일기 SQL ...(1)  (1) 2024.12.15
반응형

 

출저 : 프로그래머스
출저 : 프로그래머스

 

GROUP BY

문제풀이

 

A. LIKE OR 절 

SELECT CAR_TYPE , COUNT(*) FROM CAR_RENTAL_COMPANY_CAR 
WHERE 
OPTIONS LIKE '%가죽시트%' OR  
OPTIONS LIKE '%열선시트%' OR
OPTIONS LIKE '%통풍시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE

 

※ MYSQL 컬럼에서 단일값이 아닌 경우 IN을 쓸수가 없음. ex OPTIONS : ('가죽시트,열선시트') 면 사용불가,  OR을 사용하여 다중검색

 

8.0버전 이상에서는 REGEXP도 사용할 수 있음

반응형
반응형

 

출저 : 프로그래머스

 

GROUP BY

문제풀이

 

A1. WHERE 절 

SELECT HOUR(DATETIME), COUNT(ANIMAL_ID) FROM ANIMAL_OUTS 
WHERE HOUR(DATETIME) > 8 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)

 

※  WHERE로 조건 설정 후 DATETIME_시간 으로 그룹별 소계

 

 

A2. HAVING 절 

SELECT TIME_FORMAT(DATETIME, '%H') AS HOUR, COUNT(*) FROM ANIMAL_OUTS 
GROUP BY HOUR 
HAVING HOUR BETWEEN 9 AND 20
ORDER BY HOUR 

 

※  A2와 조금 다르게 FORMAT + AS(별칭) 이용, 조건은 시간이니 BETWEEN 으로 사이 설정 후 출력

반응형
반응형

출저:프로그래머스
출저:프로그래머스

GROUP BY

문제풀이

 

A.  GROUPBY  WHERE 절 동시사용

SELECT MCDP_CD, COUNT(APNT_YMD) AS APNT FROM APPOINTMENT 
WHERE APNT_YMD LIKE "2022-05%"
GROUP BY MCDP_CD
ORDER BY APNT, MCDP_CD

 

처음에 WHERE로 2022-05으로  조건 걸고, 진료과코드로 그룹화해서 풀었습니다. 

※ HAVING이 안되는 이유 : GROUPBY 다음 HAVING 조건절이 실행되는데 SELECT에서 COUNT라는 집계함수를 사용했기때문에 

테이블의 COUNT 출력값은 1,2,3 등 개수로 출력됨.

WHERE조건 없이했을 경우 출력 값

그래서 HAVING 조건을 사용해도 원하는 값이 안나오기때문에(없기때문에) WHERE을 사용하여 선조건을 걸고 작성해야함

반응형
반응형

출저:프로그래머스
출저:프로그래머스

SUM, MAX, MIN

문제풀이

 

A. 이중조인(LEFT, INNER)

1) LEFT JOIN

SELECT A.ID, B.FISH_NAME, A.LENGTH
FROM FISH_INFO AS A
LEFT JOIN FISH_NAME_INFO AS B ON A.FISH_TYPE = B.FISH_TYPE

 

→ 테이블 2개를 결합하여 ID, FISH_NAME, LENGTH를 뽑을 수 있는 테이블쿼리 작성

(테이블에는 안나와있지 참조 키값으로 ' FISH_TYPE ' 사용)

LEFT 결과

 

2) 그룹별 최대길이 

SELECT FISH_TYPE, MAX(LENGTH) AS MAX_LENGTH
FROM FISH_INFO
GROUP BY FISH_TYPE

 

그룹별로 최대길이 뽑기

GROUP 별 최대길이

 

3) INNER JOIN

SELECT A.ID, B.FISH_NAME, A.LENGTH
FROM FISH_INFO AS A
LEFT JOIN FISH_NAME_INFO AS B ON A.FISH_TYPE = B.FISH_TYPE    ......(1)
INNER JOIN

 (  SELECT FISH_TYPE, MAX(LENGTH) AS MAX_LENGTH
    FROM FISH_INFO
    GROUP BY FISH_TYPE )                 ......(2)

AS C ON A.FISH_TYPE = C.FISH_TYPE AND A.LENGTH = C.MAX_LENGTH;

 

각 테이블을 INNER JOIN으로 결합,

기본키값을 1개만 설정한다면 1개의 열에대해서만 중복제거가 됨( A.FISH_TYPE = C.FISH_TYPE 만 한다면 길이는 NULL 또는 중복해서 뽑히고 후자로 하면 TYPE이 중복되어 뽑힘)

INNER JOIN 결과

 

 

이중조인에 연습이 안되어 개인적으로 많이 어려웠던 문제.. 1번의 결합으로 뽑으려다보니 결과도출이 너무 어려웠음

 

해당 문제를 풀면서 GROUP BY, INNER, 기본키값 설정 등 다시 생각하게 되었음

 

역시나 이 이상의 문제(정답률60%이하) 부터는 추가공부 후에 도전하는 걸로....

반응형

+ Recent posts

// 기업0 D-Day (표지) // 기업1 D-Day