
나는 항상 코딩테스트를 두려워한다...그동안 보여지는 스펙을 쌓는데(프로젝트, 수상경력, 학점 등..) 집중했기 때문에, 온전히 코딩테스트에 집중해서 공부를 해봤던 적이 1-2개월정도? 밖에 되지 않는 것 같다.그렇기 때문에 내가 코딩테스트를 두려워하는 건, 매우 당연

LIMIT은 SQL에서 결과 행(Row)의 수를 제한할 때 사용하는 구문입니다. 특히 MySQL, PostgreSQL, SQLite등에서 사용되며, 결과가 너무 많을 때 일부만 보고 싶을 때 유용합니다.LIMIT N → 최대 n개 행만 가져오기LIMIT + ORDER

JOIN과 ON은 세트처럼 사용된다.JOIN은 두 테이블을 합치는 명령이고, ON은 어떤 기준으로 합칠지를 지정하는 절이기 때문이다.FROM절 다음에 위치하는 JOIN과 ONJOIN은 단순히 "두 테이블 A와 B를 합쳐줘"라는 명령이다. 그런데 "뭘 기준으로 합칠까?"

어떤 DB를 사용하는지에 따라 약간씩 다를 수 있지만, MySQL, PostgreSQL, Oracle등 모두 ROUND()는 지원한다.기본 문법예제ROUND는 어디에 위치할까?보통은 SELECT절에서 사용되며, 가끔은 ORDER BY절에서도 쓴다.필요하다면 WHERE,

기본 문법ASC: 오름차순(기본값)DESC: 내림차순

=: "완전히 일치"하는 값만 찾음LIKE: "패턴에 일치"하는 값도 허용

기본 문법컬럼 값이 NULL이면 → \`대체할 값'이 출력컬럼 값이 NULL이 아니면 → 그대로 출력

1. 풀이

지금 위의 테이블에서 PUBLISHED_DATE가 2021로 시작되는걸 찾으려면, 어떻게 해야할까?방법1 LIKE '2021%'"2021"로 시작하는 문자열 패턴을 찾기방법2 DATE_FORMAT(PUBLISHED_DATE, '%Y') = '2021'날짜에서 연도만 추

1. 풀이

1. 풀이

1. 풀이

1. 풀이

뭔가 했더니.. 알고보니, 이런 뜻이 있었다.따라서 INTAKE_CONDITION이 'Aged'가 아닌 걸 찾으면 되는 문제였다.!=와 <> 둘 다 가능하지만, !=이게 더 자주 쓰이고 직관적이여서 보통 많이 쓴다.→ AGE가 30이 아닌 사람을 조회합니다.

1. 풀이

1. 풀이

LIMIT은 SQL에서 결과 행(Row)의 수를 제한할 때 사용하는 구문입니다. 특히 MySQL, PostgreSQL, SQLite등에서 사용되며, 결과가 너무 많을 때 일부만 보고 싶을 때 유용합니다.LIMIT N → 최대 n개 행만 가져오기LIMIT + ORDER

20 <= AGE <= 29 이런 건 불가능하다.따라서 다음과 같은 방법을 사용해야한다.

IN은 어떤 값이 여러 값 중에 포함되어 있는지 확인할 때 사용하는 연산자입니다.보다 간결하고 가독성 좋은 조건문을 만들 수 있습니다.→ 나이가 20세, 21세, 22세 중 하나인 사용자 조회→ 나이가 30, 40이 아닌 사람만 조회이렇게 해도 되긴 하는데, 길고 반복

1. 풀이

1. 풀이

SQL에서 비트 연산자(&, |, ^)를 사용하면, 숫자는 자동으로 2진수(비트 단위)로 변환되어 연산된다.

방법1 DATE_FORMAT 사용방법2 MONTH() 함수 사용YEAR(), MONTH(), DAY(), HOUR, MINUTE, SECOND 함수는 MySQL에서 날짜(Date/Datetime)에만 적용되는 함수이다. DATE_FORMAT()은 문자열을 반환하지만,

결국에 (회원ID, 상품ID)쌍으로 구매 횟수가 2번 이상인 경우를 구하면 되는거다.이렇게 두 컬럼을 동시에 그룹핑하면, "회원-상품 조합별로 묶어서" 구매 횟수를 셀 수 있다.참고로, GROUP BY뒤에 나열하는 컬럼의 순서는 결과 집계에는 영향을 주지 않는다.다음

일단 예제부터 이해가 안가서 한참을 들여다봤다.예제먼저, ITEM_INFO테이블에서 RARITY가 RARE인 행을 찾는다.그것에 해당하는 ITEM_ID는 0, 1, 3, 4이다.0, 1, 3, 4에 대한 다음 업그레이드 아이템의 ID는 1, 2, 3, 4가 된다.ITE

비트마스킹은 여러 개의 상태를 숫자 1개로 표현하는 기술이다. 각 상태를 2진수의 비트(0 또는 1)로 저장한다.예를 들어, 개발자가 어떤 언어를 아는지 저장하고 싶다고 해보자.예시 Python과 CPython = 2C두 개를 더하면? 2+4=6즉, 이 사람의 SKIL

1. 풀이

A.GENOTYPE & B.GENOTYPE의 의미유사 문제 1: \[MySQL]\[Lv. 1] 특정 형질을 가지는 대장균 찾기유사 문제 2: \[MySQL]\[Lv. 2] 조건에 맞는 개발자 찾기유사 문제를 모두 풀었다면, 충분히 풀 수 있는 문제다.

절대 쉬운 문제는 아니었지만, 문제를 잘 이해하고 차근차근 풀면 충분히 풀 수 있는 문제다.

CASE WHEN은 SQL에서 조건에 따라 다른 값을 반환하고 싶을 때 사용하는 조건 분기문이다.마치 프로그래밍 언어의 if-else나 switch-case문과 비슷하게 동작한다.예제 예시 테이블

1. 문제 접근 1-1. NTITLE(n) 1-2. PERCENT_RANK() 1-3. NTITLE VS. PERCENT_RANK

1. 풀이

OFFLINE_SALE테이블에는 USER_ID가 없기 때문에 NULL로 처리해야 한다.어떻게 처리할 수 있을까?이렇게 'YES' AS USER_ID이렇게 쓰면, 해당 컬럼이 'YES'로 채워지는 걸 확인할 수 있다.그렇다면, NULL로 채워지길 원한다면 다음과 같이 작

차근차근 풀면 충분히 풀 수 있는 문제다!

와.. 확실히 레벨5라서 그런지.. 어렵다 ㅠㅠㅠ그치만 차근차근 살펴보자.CTE는 WITH 키워드를 사용해서 만드는 임시 테이블이다.→ 메인 쿼리 전에 잠깐 사용할 서브쿼리에 이름을 붙인 것이라고 보면 된다.👉 WITH로 서브쿼리를 미리 정의하고,아래에서 그 테이블처

1. 풀이

1. 풀이

1. 풀이

1. 풀이

1. 풀이

1. 풀이

1. 풀이

정말 LEFT JOIN만 해보았다.이렇게 나온다.즉, A인 ITEM INFO테이블에 있는 ITEM들이, 본인을 부모로 여기는 자식들이 없는지 ITEM TREE에서 확인하는거다.만약에 자식들이 없다면 당연히 B.PARENT_ITEM_ID에는 NULL이 들어갈거다.

LEFT JOIN을 사용하면 저자 ID가 없는 책도 조회는 되지만, 저자 정보는 NULL로 나타나게 된다. 그러나 모든 BOOK은 저자 ID를 반드시 가지게 되어 있으므로 → LEFT JOIN을 JOIN(=INNER JOIN)으로 바꿔도 정답이다.

1. 풀이

답을 힐끔 봤다.그런데 LEFT JOIN을 썼더라.문제에서 요구한 건 다음과 같다."입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요."LEFT JOIN 형태는 다음과 같다.A와 B를 매칭해보면,A

1. 풀이

문제에서 요구한 바는 다음과 같다."아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요."따라서 벤다이어그램으로 표시하면 다음과 같다.

1. 풀이

MAX()나 MIN()함수는 숫자뿐 아니라 날짜(datetime)에도 사용할 수 있다.실제로 날짜는 내부적으로 숫자(타임스탬프)로 저장되기 때문에 비교가 가능하다.DATETIME은 YYYY-MM-DD HH:MM:SS 형식인데,이 형식은 문자열로 봐도, 앞에서부터 순차적

CONCAT()함수는,두 개 이상의 문자열을 하나로 연결할 때 사용하는 SQL 함수다.각 문자열을 순서대로 이어 붙인 결과를 반환된다.숫자도 문자열처럼 자동으로 변환되어 연결된다.NULL이 포함되면 결과도 NULL이다.

1. 왜 오답인지 살펴보자 나는 맨 처음에 답이 이거라고 생각했다. 그러나, 자꾸 오답이라고 떴다. 왜 틀렸을까...?😭 **내가 작성한 코드는 문제가 발생하는 이유가, "가장 비싼 가격"은 딱 하나인데, 다른 값들(PRODUCTID, PRODUCTNAME, P

1. 풀이

1. 풀이

DISTINCT는 함수가 아니라 키워드다.중복이 제거된 값을 조회하기 위해 사용된다.애초에 COUNT(컬럼명) 자체는 NULL을 제외하고 센다.사실 DISTINCT NAME를 키워드가 아니라 DISTINCT(NAME)이렇게 함수처럼 적어도 정답으로 인정된다.이렇게 함수

1. 풀이

내가 작성한 코드 (오답)작동시켰을때, 심지어 제대로 나온다. 의도한대로 결과도 나왔기 때문에, "도대체 왜 정답 처리가 안되는거지?"라는 의문이 들었다.

PARTITION BY를 사용해야 한다는 생각을 떠올리는 게 은근 쉽지 않다... ㅎ

1. 문제 접근 1-1. REGEXP (정규표현식) 참고 ✔️ 형태 | 패턴 | 의미 설명 | 예시 패턴 → 매칭 결과 (✅: 옳은 예시 ❌: 틀린 예시) | |--

나의 풀이 (오답)당연히 맞을 줄 알았는데, 틀렸다!✅ 여기서는 별칭(alias)인 5월예약건수, 진료과코드를 ORDER BY에서 홑따옴표 없이 사용해야 한다.⚠️ 홑따옴표 '진료과 코드'는 절대 쓰면 안 된다.→ 이건 문자열 리터럴(상수)로 인식된다.

1. 풀이

1. 풀이

처음 작성한 풀이 (오답)심지어!! 답도 원하는 대로 나온다!근데 왜 정답 처리가 되지 않는 거지...

항상 문제를 풀 때, 예시대로 잘 결과가 나오는데, 정답을 통과하지 못한다면, 혹시 놓친 조건이 있는지 꼭 확인해보자!나도 해당 조건을 놓쳐서,뒤늦게WHERE HOUR(DATETIME) BETWEEN 9 AND 19를 추가했더니 통과되었다.

FLOOR()는 소수점 아래로 내림이기 때문에\-3.3 → -4로 처리된다.

1. 풀이

내가 작성한 풀이 (오답)나는 맞았다고 생각했다.심지어 테스트1도 통과했다.그러나 다른 test case를 통과하지 못했는지, 정답 처리가 되지 않았다.ORDER BY TOTAL_DISTANCE DES에서 숫자가 아닌, 문자열 기준으로 정렬되기 때문이다.TOTAL_DI

1. 풀이

1. 풀이

이걸 어떻게 비교할까?방법1방법2응 가능해!SQL에서는 문자열 2022-08-01을 내부적으로 자동으로 DATE로 바꿔서 비교한다. 이걸 암시적 형 변환(implicit type conversion) 이라고 부른다.마치 CAST를 하는 것과 같은 효과다.CASE1 DA

1. 풀이

1. 풀이


1. 풀이

1. 풀이

col: 컬럼명

1. 문제 접근 1-1. % %는 "0개 이상의 모든 문자"를 의미하기 때문에, 아무 문자도 앞뒤로 붙지 않아도 된다. | 패턴 | 설명 | 매칭 예시 |

SQL에서 두 날짜 간의 차이(일 수)를 구할 때 사용하는 아주 유용한 함수이다.해당 함수는 두 날짜 간의 일(day) 단위 차이를 정수로 반환한다.결과 = 날짜1 - 날짜2 (단위: 일)반환값은 정수양수 → 날짜1이 더 미래음수 → 날짜1이 더 과거0 → 두 날짜가

1. 풀이

1. 풀이

1. 풀이

1. 풀이

작은 차이지만 더 안전한 코드 (문법적으로)MySQL에서 문자열은 큰따옴표(") 대신 작은따옴표(')를 사용하는 것이 표준이라고 한다.사실 LOWER() 안써도 작동한다.왜냐면, MySQL의 기본 문자열 정렬 방식(Collation)은 대소문자 구분을 하지 않기 때문이

1. 풀이

MySQL에서 SUBSTR() 또는 SUBSTRING() 함수는 문자열의 일부를 추출할 때 사용된다.string: 원본 문자열start_position: 추출 시작 위치 (1부터 시작)length(선택): 추출할 문자 수 (생략하면 끝까지)

1. 풀이

1. 풀이

NULL이 들어가면 QUARTER(NULL)은 NULL을 반환풀이1풀이2 QUARTER() 사용

1. 풀이

1. 풀이

1. 풀이

1. 풀이

1. 풀이