user-img
CodingTest > SQL-문제 풀이 12
thumbnail
[프로그래머스] Lv1 조건에 맞는 도서 리스트 출력하기
1
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: DATE 함수, = 동등 비교원래 DATE()함수 안에 DATE TIME을 넣으면 DATE로 변환 되어지는 것으로 알고 있는데, 여기서는 그게 안 통해서 뭔가 찜찜하다. 그래서 DBEAVER에서 돌려보니, 또 된다.일단 프로그래머스에서는 저 DATE 함수가 먹히지 않아서, DATE_FORMAT(A, '와일드 카드 문장') 형태로 문제를 풀었다.2. 구현 코드🔎SELECTBOOK_ID,DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATEFROM BOOKWHERE YEAR(PUBLISHED_DATE) = '2021'AND CATEGORY = '인문';3. DRILING 🎯없음 이모..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 평일 일일 대여 요금 구하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: ROUND(A, num)ROUND(A,num)일 때, num은 반올림하여 살아있는 소수점 자릿수이다. ROUND(A,1)이라면, 2.x, 3.x 등 1의 자리까지 살아 남는다는 뜻이다. SQL 쿼리문에서는 =이 JAVA와 달리 내용 비교이다. 따라서 문자열을 비교할 때도 써도 된다.3. 구현 코드🔎SELECTROUND(AVG(DAILY_FEE), 0) AS 'AVERAGE_FEE'FROM CAR_RENTAL_COMPANY_CARWHERE CAR_TYPE = 'SUV'4. DRILING 🎯(1) = 내용 비교에 대해JAVA와 달리 MySQL은 A = B일 시, 값 기반 비교가 수행됨MySQL에서는 메모리 주소를 활용한 객체 개념..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 자동차 대여 기록에서 장기 / 단기 대여 구분하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: DATEDIFF(), CASE WHEN THEN END 문DATEDIFF(끝 시간, 시작 시간)은 끝 시간에서 시작시간을 빼서, 둘의 날짜 차이를 INTEGER로 반환하는 함수이다. 이를 활용하여 문제를 풀어야 한다. 또한 CASE-WHEN-THEN...END 문을 활용해 30일 이상은 장기 대여 아니면 단기 대여로 구분해야 한다.이때 주의해야 할 점이 당일 대여, 당일 반납해도 하루로 친다는 것이다. 그것을 토대로 계산해보면, 실질적으로 날짜는 29일 지난 시점이 +1 더해서 30일 동안 대여를 한 시점이 된다.2. 구현 코드🔎SELECTHISTORY_ID,CAR_ID,DATE(START_DATE),DATE_FORMAT(END..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv 1 특정 옵션이 포함된 자동차 리스트 찾기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: LIKE, REGEXPOPTIONS란 카테고리를 또 정규화 안해서 한 컬럼에 여러 개의 값들이 한 줄의 문자열로 들어있는 상태문자열 중에서 '네비게이션'이 포함되어 있는 녀석을 찾아야 함.이걸 하는 방법에는 LIKE 활용과, REGEXP 활용 2가지로 나뉨2. 구현 코드🔎A. LIKE 활용 쿼리문SELECT *FROM CAR_RENTAL_COMPANY_CARWHERE OPTIONS LIKE '%네비게이션%'ORDER BY CAR_IDDESC;B. REGEXP 활용 쿼리문SELECT *FROM car_rental_company_carWHERE options REGEXP '네비게이션'ORDER BY car_i..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv2 조건에 맞는 개발자 찾기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: Bit 연산개발자의 정보(DEVELOPERS)와 개발 언어의 스킬 코드(SKILLCODES)가 적힌 두 테이블이 존재한다.DEVELOPERS에서는 개발자가 쓰는 언어에 대해 SKILL_CODE라는 컬럼으로 나타내는데, 이 코드의 INTEGER 값은 2진수 비트로 나타냈을 때, 2진수 자릿값 하나당 해당 개발자가 사용할 수 있는 언어 CODE의 값이다.예를 들어, 어떤 개발자 B의 SKILL_CODE 컬럼의 값이 400이라 해보자. 그리고 개발언어의 SKILLCODES 테이블이 다음과 같다고 해보자.NAMECATEGORYCODEC++Back End4JavaScriptFront End16JavaBack End128PythonBack ..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 조건에 부합하는 중고거래 댓글 조회
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: DATE_FORMAT 활용, INNER JOIN게시판 글, 그와 연관된 댓글을 한 번에 조회해야 하므로, JOIN 필수이때, 조건에 맞더라도, 양쪽 모두 값이 있는 경우만 가져와야 함으로, INNER JOIN을 써야 한다고 판단YYYY-MM 형태를 맞추기 위해 DATE_FORMAT 활용2. 구현 코드 🔎SELECTgb.TITLE,gb.BOARD_ID,gr.REPLY_ID,gr.WRITER_ID,gr.CONTENTS,DATE_FORMAT(gr.CREATED_DATE, '%Y-%m-%d') AS 'CREATED_DATE'FROM USED_GOODS_BOARD gbINNER JOIN USED_GOODS_REPLY grON (gb.BO..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 Python 개발자 찾기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: *IN *Python을 쓸 수 있는 개발자를 전부 찾는 쿼리문이다. 근데 지금은 테이블 정규화를 안 해놔서, 하나의 테이블에 SKILL이 _1, _2, _3 형태로 여러 개 존재하고 있다. 여기서 Python이 든 사람들을 추려내야 한다. 처음에 구할 때는,WHERE SKILL_1 = 'Python'OR SKILL_2 = 'Python'OR SKILL_3 = 'Python'이런 식으로 구했지만, IN을 쓰면'Python' IN (SKILL_1, SKILL_2, SKILL_3)으로 구하면 된다.필자는 COLUMN NAME IN (VALUE_1, VALUE_2, ...) 이 형태만 가능한 줄 알았지만, 그 반대도 가능하다는 것을 처음..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv 1 잔챙이 잡은 수 구하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: IS NULL문제 조건이 10cm 이하인 물고기의 LENGTH는 무조건 NULL로 표시한다고 하였음으로, NULL 인 레코드의 개수만 세서 출력하면 된다.2. 구현 코드 🔎SELECT COUNT(*) AS 'FISH_COUNT'FROM FISH_INFO fWHERE f.LENGTH IS NULL;3. DRILING 🎯KEY WORD: IS NULL vs = NULL처음에 문제를 풀 때, = NULL 로 문제를 풀어서 틀렸다. = NULL이 안되는 이유는 다음과 같다.= 은 비교 연산이다. 근데 NULL 자체가 모르는 값을 의미하므로, A = NULL은 곧 'A가 뭔지 모르는 값과 같은가?'를 묻는 비교 연산 이 된다. 따라서 ..
1주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv 1 잡은 물고기의 평균 길이 구하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: CASE-WHEN 분기문, AVG 집계함수, ROUND() 원하는 지점에서 소수점 반올림NULL 인 녀석들에 대한 예외 처리가 필요하다. -> AVG는 null 값을 제외하고 평균 내기 때문에, Null을 전부 10으로 바꿔주지 않으면, 계산이 제대로 되지 않는다.AVG()는 DEFAULT로 자릿수를 6개 까지 가져온다. 여기서 ROUND를 이용해 원하는 곳에서 소수점 반올림을 해야한다.2. 구현 코드 🔎SELECT ROUND( AVG( CASE WHEN f.LENGTH IS NULL THEN 10 ELSE f.LENGTH END),2 ) AS AVERAGE_LENGTHFROM FISH..
2주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 잡은 물고기 중 가장 큰 물고기의 길이 구하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: 문자열 합치기, 집계 함수cm를 길이에 합치기 위해 CONCAT() 함수 활용max() 집계 함수 활용2. 구현 코드 🔎SELECT CONCAT(max(f.LENGTH), 'cm') as MAX_LENGTHFROM FISH_INFO f3. DRILING 🎯(1) MAX() 집계함수의 내부 작동 원리// 초기화int maxValue = NULL;for (int i = 0; i maxValue) { maxValue = currentRowValue; }}return maxValue;이렇게 행 하나씩 비교하며 MAX 값을 찾는 구조를 ** **1-pass linear scan이라 부른다.(2) CONCAT(A,B,..
2주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 한해에 잡은 물고기 수 구하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: 문자열 자르기, 집계 함수해당 문제는 "'YYYY/MM/DD' 형식의 TIME에서 앞 4자리의 연도를 짜를 수 있는가?"를 묻는 문제이다.2. 구현 코드 🔎A. DATE 문 전용 함수 사용SELECT COUNT(*) AS FISH_COUNTFROM FISH_INFOWHERE YEAR(time) = 2021;B. DATE TYPE이 아닌 경우도 쓸 수 있는 함수 활용substr() 활용select count(*) as FISH_COUNT from FISH_INFOwhere substr(time, 1, 4) = '2021';Like 활용select count(*) as FISH_COUNT from FISH_INFOwhere TIME..
2주 전
CodingTest > SQL-문제 풀이
thumbnail
[프로그래머스] Lv1 가장 큰 물고기 10마리 구하기
1. 문제 설명 📌(1) 링크🔗문제 링크(2) 해설🕵KEY WORD: SELECT, SORTING 우선순위문제의 핵심 포인트는 정렬에 우선순위를 두는 것이다.(1순위) LENGTH로 내림차순 정렬(2순위) LENGTH가 같다면 ID로 오름차순 정렬MySQL에서는 ORDER BY 명령어 뒤에 먼저 오는 순으로, 우선순위가 높다.우선순위가 높은 정렬 방식으로 정렬했을 시, 동점이 생기면 차순위 정렬 방식으로 해당 부분을 재정렬 한다.2. 구현 코드 🔎SELECT f.ID, f.LENGTH FROM FISH_INFO fORDER BY f.LENGTH DESC, f.ID ASCLIMIT 10;3. DRILING 🎯없음
2주 전
CodingTest > SQL-문제 풀이