티스토리 뷰

  • DBeaver에서 Ctrl 누르고 마우스로 원하는 테이블명 클릭 → 테이블 시트 열림!
  • 집계함수 쓸 수 있는 곳! = SELECT, ORDER BY, HAVING

SQL 코드카타

Q1. 이름이 있는 동물의 아이디

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59407

2. 정답 코드:

SELECT ANIMAL_ID
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID ASC

 

Q2. 역순 정렬하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59035

2. 정답 코드:

SELECT
    NAME,
    DATETIME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;

 

Q3. 중복 제거하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59408

2. 정답 코드:

SELECT
    COUNT(DISTINCT NAME) AS count
FROM ANIMAL_INS;

 

 

Q4. 동물의 아이디와 이름

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59403

2. 정답 코드:

SELECT
    ANIMAL_ID,
    NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

Q5. 동물 수 구하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59406

2. 정답 코드:

SELECT
    COUNT(*) AS count
FROM ANIMAL_INS;

 

Q6. 동물 수 구하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59041

2. 정답 코드:

SELECT
    NAME,
    COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;

3. 오류 상황: 결과는 제대로 나왔음

4. 시도 방법: 문제를 다시 한번 읽고 빠진 조건이 없는지 확인함

5. 최종 문제 해결 방법: ORDER BY NAME 조건 빠져있어서 추가함


Q7. 아픈 동물 찾기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59036

2. 정답 코드:

SELECT
    ANIMAL_ID,
    NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;


Q8. 상위 n개 레코드

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59405

2. 정답 코드:

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

3. 오류 상황: WHERE DATETIME = MIN(DATETIME) ← 조건을 이렇게 설정함

                    (오류 메시지 : SQL 실행 중 오류가 발생하였습니다. Invalid use of group function)

4. 시도 방법: MIN 말고 정렬 순서로 구문을 바꿈

5. 최종 문제 해결 방법: ORDER BY DATETIME 내림차순 정렬 후에 1개만 보이도록 함

만약 DATETIME 사용하고 싶다면, 아래와 같이 작성해야 함
WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS)

 

Q9. 최솟값 구하기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59038

2. 정답 코드:

SELECT DATETIME AS '시간'
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;


Q10. 어린 동물 찾기

1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59037

2. 정답 코드:

SELECT
    ANIMAL_ID,
    NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION <> 'Aged'
ORDER BY ANIMAL_ID;

라이브 세션) SQL 강의  5 (CASE, Subquery, FROM 서브쿼리(파생 테이블), CTE (WITH))

CASE

1) 값 비교형(Simple CASE)

CASE 컬럼
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과2
ELSE 결과
END

 

2) 조건식형(Searched CASE)

CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 결과
END

 

 위에서부터 순서대로 검사해서, 처음 참인 WHEN에서 멈춤

 

 

미니실습 3 (COUNT 쓸건지, SUM 쓸건지 개념 제대로!)

SELECT
	COUNT(DISTINCT enrollment_id) AS total,
	SUM(CASE WHEN enrollment_status = 'active' THEN 1 ELSE 0 END) AS active_cnt,
	SUM(CASE WHEN enrollment_status = 'completed' THEN 1 ELSE 0 END) AS completed_cnt,
	SUM(CASE WHEN enrollment_status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled_cnt
FROM basic.enrollments

#SUM으로 풂

SELECT
	COUNT(DISTINCT enrollment_id) AS total,
	COUNT(CASE WHEN enrollment_status = 'active' THEN 1 END) AS active_cnt,
	COUNT(CASE WHEN enrollment_status = 'completed' THEN 1 END) AS completed_cnt,
	COUNT(CASE WHEN enrollment_status = 'cancelled' THEN 1 END) AS cancelled_cnt
FROM basic.enrollments

#COUNT로 풂


Subquery

미니실습 4

SELECT
	enrollment_id,
	final_price
FROM basic.enrollments
WHERE final_price > (SELECT avg(final_price) FROM basic.enrollments)
ORDER BY final_price ASC

 

미니실습 6

SELECT 
	e.enrollment_id
FROM basic.enrollments e
WHERE NOT EXISTS	 (
SELECT * 
FROM basic.payments p
WHERE e.enrollment_id = p.enrollment_id
)

FROM 서브쿼리(파생 테이블)

별칭은 필수!

SELECT
  c.course_id,
  c.course_name,
  IFNULL(enr.enroll_cnt, 0) AS enroll_cnt  #보여주기 쉽게 NULL 값 대체!
FROM basic.courses c
LEFT JOIN (
  SELECT
    course_id,
    COUNT(*) AS enroll_cnt
  FROM basic.enrollments
  GROUP BY course_id
) AS enr     #별칭 필수!
  ON c.course_id = enr.course_id
ORDER BY c.course_id;

 

미니실습 7

SELECT
	s.student_id,
	s.student_name,
	ifnull(enr.enroll_cnt, 0) AS enroll_cnt
FROM basic.students s
LEFT JOIN (
	SELECT
		student_id,
		count(*) AS enroll_cnt
	FROM basic.enrollments e 
	GROUP BY student_id
) AS enr
	ON s.student_id = enr.student_id;

CTE (WITH)

CTE 기본문법

WITH 이름 AS (
  SELECT ...
)
SELECT *
FROM 이름;

 

미니실습 8

WITH active_courses AS (
	SELECT course_id, course_name, is_active
	FROM basic.courses
	WHERE is_active = 1
)
SELECT *
FROM active_courses;

 

종합실습 ★★ 이해 중요!

WITH
enroll_by_student AS (
	SELECT
		student_id,
		count(*) AS enroll_cnt
	FROM basic.enrollments
	GROUP BY student_id
),
coupon_by_student AS (
	SELECT
		student_id,
		count(*) AS coupon_used_cnt
	FROM basic.enrollments
	WHERE coupon_code IS NOT NULL
	GROUP BY student_id
)
SELECT
	s.student_id,
	s.student_name,
	s.region,
	s.segment,
	
	ifnull(e.enroll_cnt, 0) AS enroll_cnt,
	ifnull(c.coupon_used_cnt, 0) AS coupon_used_cnt,
	
	CASE
		WHEN ifnull(c.coupon_used_cnt, 0) = 0 THEN 'no_coupon_user'
		ELSE 'coupon_user'
	END AS coupon_user_flag
FROM basic.students s
LEFT JOIN enroll_by_student e
	ON s.student_id = e.student_id
LEFT JOIN coupon_by_student c
	ON s.student_id = c.student_id
ORDER BY s.student_id;

과제 1.  CASE로 “쿠폰 사용 여부 + 가격 구간” 라벨 만들기

✅ 상황

운영팀이 enrollments를 볼 때, 쿠폰 사용 여부와 결제금액 구간이 한눈에 보이길 원합니다.

 

✅ 목표

enrollment_status가 active, completed인 신청만 대상으로 아래 컬럼을 출력하세요.


출력 컬럼

  • enrollment_id
  • student_id
  • final_price
  • coupon_flag
    • 쿠폰 미사용(coupon_code IS NULL) → 'no_coupon'
    • 쿠폰 사용 → 'coupon_used'
  • price_bucket
    • final_price < 50000 → 'low'
    • 50000 <= final_price < 90000 → 'mid'
    • final_price >= 90000 → 'high'

정렬

  • enrollment_id 오름차순
SELECT
	enrollment_id,
	student_id,
	final_price,
	CASE
		WHEN coupon_code IS NULL THEN 'no_coupon'
		ELSE 'coupon_used'		
	END AS coupon_flag,
	CASE
		WHEN final_price >= 90000 THEN 'high'
		WHEN final_price >= 50000 THEN 'mid'
		WHEN final_price < 50000 THEN 'low'
	END AS price_bucket
FROM basic.enrollments
WHERE enrollment_status IN ('active', 'completed')
ORDER BY enrollment_id ASC;

# 내가 작성한 쿼리 (큰 것부터 작은 것 순으로 CASE WHEN 사용)

SELECT
  enrollment_id,
  student_id,
  final_price,
  CASE
    WHEN coupon_code IS NULL THEN 'no_coupon'
    ELSE 'coupon_used'
  END AS coupon_flag,
  CASE
    WHEN final_price < 50000 THEN 'low'
    WHEN final_price < 90000 THEN 'mid'
    ELSE 'high'
  END AS price_bucket
FROM basic.enrollments
WHERE enrollment_status IN ('active', 'completed')
ORDER BY enrollment_id;

# 정답 쿼리 (작은 것부터 큰 것 순으로 CASE WHEN 사용)


과제 2. IN 서브쿼리로 “SQL 카테고리 강좌를 신청한 학생” 찾기 구조 쉽게 생각하기

✅ 상황

마케팅팀이 SQL 카테고리 강좌를 신청한 학생에게만 안내 메시지를 보내려 합니다.

 

✅ 목표

`courses.category = 'sql'`인 강좌를 한 번이라도 신청한 학생 목록을 출력하세요.
(신청 상태는 `active`, `completed`만 포함 / `cancelled` 제외)


출력 컬럼

  • student_id
  • student_name

정렬

student_id 오름차순

SELECT 
	s.student_id,
	s.student_name
FROM basic.students s 
INNER JOIN
(
	SELECT
		e.student_id
	FROM basic.enrollments e
	WHERE e.course_id IN
		(SELECT c.course_id 
		FROM basic.courses c
		WHERE c.category ='sql'
		)
	AND 	e.enrollment_status IN ('active', 'completed')
) AS student_sql
ON s.student_id = student_sql.student_id 
GROUP BY s.student_id, s.student_name
ORDER BY s.student_id ASC;

# IN 구문 2개 중복 사용  (1차 작성문)

SELECT
	s.student_id,
	s.student_name
FROM basic.students s
WHERE s.student_id IN (
	SELECT
		e.student_id
	FROM basic.enrollments e
	INNER JOIN basic.courses c 
		ON e.course_id = c.course_id 
	WHERE c.category = 'sql'
	  AND e.enrollment_status IN ('active', 'completed')
	GROUP BY e.student_id
)
ORDER BY s.student_id ASC;

# IN 구문 1개, WHERE 조건 (2차 작성문) - 과제 제출 Ver.

SELECT
  s.student_id,
  s.student_name
FROM basic.students s
WHERE s.student_id IN (
  SELECT e.student_id
  FROM basic.enrollments e
  WHERE e.enrollment_status IN ('active', 'completed')
    AND e.course_id IN (
      SELECT c.course_id
      FROM basic.courses c
      WHERE c.category = 'sql'
    )
)
ORDER BY s.student_id;

# 정답 쿼리 (INNER JOIN 사용 X, IN 구문 2개)

1차 작성문은 IN 구문을 2개나 사용해서 쿼리 구조를 한눈에 보기 좀 어려운데,
2차 작성문은 WHERE 절을 활용해 좀 더 보기 쉽게 바꿨다.
3개의 테이블을 엮어야 하는 문제여서 복잡하게 생각하다보니 처음부터 간결하게 작성하기가 어려웠다.
문제 풀이 전, 어떤 컬럼을 연결해야 하는지/조건은 어떻게 설정해야 하는지 한번 더 점검하고 들어가야겠다!
+
courses.category = 'sql'`인 강좌를 한 번이라도 신청한 학생이라는 조건이
EXISTS를 써야만 하는 것인지
아니면 WHERE c.category = 'sql'
이렇게만 해도 되는지 잘 모르겠다.
(과제 정답 확인해서 궁금증 해결 필요함,,)
→ EXISTS 사용 안해도 됨!
+
정답 확인하고나니, course_id 자체에 서브쿼리를 걸어서
INNER JOIN을 사용하지 않고도
조건을 줄 수 있다는 걸 알게 되었다!

과제 3. NOT EXISTS로 “쿠폰을 한 번도 사용하지 않은 학생” 찾기

✅ 상황

쿠폰을 한 번도 사용하지 않은 학생에게 “첫 쿠폰 혜택”을 주려고 합니다.

 

✅ 목표

아래 조건을 만족하는 학생만 출력하세요.

  • 해당 학생의 enrollments 중에서
  • coupon_code IS NOT NULL인 행이 단 한 건도 없는 학생

포인트: “없다”를 찾는 가장 대표 패턴이 NOT EXISTS 입니다.


출력 컬럼

  • student_id
  • student_name

정렬

student_id 오름차순

SELECT
	s.student_id,
	s.student_name
FROM basic.students s 
WHERE NOT exists (
	SELECT 1
	FROM basic.enrollments e
	WHERE
		e.student_id = s.student_id 
	  AND e.coupon_code IS NOT NULL
)
ORDER BY s.student_id ASC;

# 내가 작성한 쿼리

SELECT
  s.student_id,
  s.student_name
FROM basic.students s
WHERE NOT EXISTS (
  SELECT 1
  FROM basic.enrollments e
  WHERE e.student_id = s.student_id
    AND e.coupon_code IS NOT NULL
)
ORDER BY s.student_id;

# 정답 쿼리


과제 4. CTE로 “학생별 신청/쿠폰 요약 + 라벨( CASE )” 만들기 ★ 구조 복잡

✅ 상황

운영팀이 학생별로 “신청 수 / 쿠폰 사용 수 / 쿠폰 유저 여부 / 신청 유저 여부”를 한 번에 보고 싶어합니다.

(5회차 라이브 세션에서 만든 쿼리 형태를 그대로 활용)

 

✅ 목표

CTE 2개로 요약 테이블을 만든 뒤 `students`에 LEFT JOIN해서 아래를 출력하세요.
단, 신청 상태는 `active`, `completed`만 포함 (취소 제외)

 

출력 컬럼

  • student_id
  • student_name
  • enroll_cnt (신청 수)
  • coupon_used_cnt (쿠폰 사용 신청 수)
  • enroll_flag
    • enroll_cnt = 0 → 'no_enroll'
    • 그 외 → 'has_enroll'
  • coupon_user_flag
    • coupon_used_cnt = 0 → 'no_coupon_user'
    • 그 외 → 'coupon_user'
  • coupon_usage_rate_pct
    • enroll_cnt = 0이면 0
    • 그 외 ROUND(coupon_used_cnt / enroll_cnt * 100, 1)

정렬

student_id 오름차순

WITH
enroll_by_student AS (
	SELECT student_id, count(*) AS enroll_cnt
	FROM basic.enrollments
	WHERE enrollment_status IN ('active', 'completed')
	GROUP BY student_id
),
coupon_by_student AS (
	SELECT
		student_id,
		count(*) AS coupon_used_cnt
	FROM	 basic.enrollments
	WHERE coupon_code IS NOT NULL
	  AND enrollment_status IN ('active', 'completed')
	GROUP BY student_id
)
SELECT
	s.student_id,
	s.student_name,
	ifnull(e.enroll_cnt, 0) AS enroll_cnt,
	ifnull(c.coupon_used_cnt, 0) AS coupon_used_cnt,
	CASE
		WHEN ifnull(e.enroll_cnt, 0) = 0 THEN 'no_enroll'
		ELSE 'has_enroll'
	END AS enroll_flag,
	CASE
		WHEN ifnull(c.coupon_used_cnt, 0) = 0 THEN 'no_coupon_user'
		ELSE 'coupon_user'
	END AS coupon_user_flag,
	CASE
		WHEN ifnull(e.enroll_cnt, 0) = 0 THEN 0
		ELSE round(ifnull(c.coupon_used_cnt, 0) / ifnull(e.enroll_cnt, 0) * 100, 1)
	END AS coupon_usage_rate_pct
FROM basic.students s
LEFT JOIN enroll_by_student e
  ON s.student_id = e.student_id
LEFT JOIN coupon_by_student c
  ON s.student_id = c.student_id
ORDER BY s.student_id ASC;

# 내가 작성한 쿼리

WITH
enroll_by_student AS (
  SELECT
    student_id,
    COUNT(*) AS enroll_cnt
  FROM basic.enrollments
  WHERE enrollment_status IN ('active', 'completed')
  GROUP BY student_id
),
coupon_by_student AS (
  SELECT
    student_id,
    COUNT(*) AS coupon_used_cnt
  FROM basic.enrollments
  WHERE enrollment_status IN ('active', 'completed')
    AND coupon_code IS NOT NULL
  GROUP BY student_id
)
SELECT
  s.student_id,
  s.student_name,

  IFNULL(e.enroll_cnt, 0) AS enroll_cnt,
  IFNULL(c.coupon_used_cnt, 0) AS coupon_used_cnt,

  CASE
    WHEN IFNULL(e.enroll_cnt, 0) = 0 THEN 'no_enroll'
    ELSE 'has_enroll'
  END AS enroll_flag,

  CASE
    WHEN IFNULL(c.coupon_used_cnt, 0) = 0 THEN 'no_coupon_user'
    ELSE 'coupon_user'
  END AS coupon_user_flag,

  CASE
    WHEN IFNULL(e.enroll_cnt, 0) = 0 THEN 0
    ELSE ROUND(IFNULL(c.coupon_used_cnt, 0) / IFNULL(e.enroll_cnt, 0) * 100, 1)
  END AS coupon_usage_rate_pct
FROM basic.students s
LEFT JOIN enroll_by_student e
  ON s.student_id = e.student_id
LEFT JOIN coupon_by_student c
  ON s.student_id = c.student_id
ORDER BY s.student_id;

# 정답 쿼리

 

처음에는 쿼리가 길어서 막막했는데,
다행히 정답 쿼리와 동일하게 작성할 수 있었다.
각 구조로 나누고 붙이는 방식으로 연습하면 익숙해질 것 같다! 

데일리 퀴즈

Q1. CTE(WITH)에 대한 설명으로 가장 올바른 것은?

A. CTE는 실행하면 DB에 영구 테이블로 저장된다
B. CTE는 단일 statement 범위에서만 존재하며, 그 statement 안에서 여러 번 참조할 수 있다
C. CTE는 GROUP BY가 반드시 포함되어야 한다
D. CTE는 MySQL에서 지원되지 않는다

 

Q2. MySQL에서 아래처럼 FROM 절에 서브쿼리를 넣을 때 반드시 필요한 것은?

SELECT *
FROM (SELECT course_id FROM basic.courses);

A. WHERE 절
B. ORDER BY 절
C. 파생 테이블(derived table)의 별칭(alias)
D. LIMIT 절

 

Q3. EXISTS 서브쿼리에 대한 설명으로 올바른 것은?

A. 서브쿼리가 0행을 반환하면 EXISTS는 TRUE이다
B. 서브쿼리가 1행 이상을 반환하면 EXISTS는 TRUE이다
C. EXISTS는 서브쿼리의 SELECT 컬럼 목록을 반드시 실제로 사용해서 계산한다
D. EXISTS는 반드시 GROUP BY와 함께 써야 한다

 

Q4. CASE WHEN(CASE 표현식) 동작에 대한 설명으로 가장 올바른 것은?

A. 모든 WHEN 조건을 끝까지 평가한 뒤, TRUE인 THEN 결과를 모두 합쳐 반환한다
B. 위에서부터 조건을 평가하며 처음 TRUE가 된 THEN의 값을 반환하고,

     ELSE가 없고 조건이 모두 FALSE면 NULL을 반환할 수 있다
C. CASE는 WHERE 절에서만 사용할 수 있다
D. CASE는 숫자 결과만 반환할 수 있다

 

Q5. IFNULL(expr1, expr2)의 동작으로 올바른 것은?

A. expr1이 NULL이면 expr1을 반환한다
B. IFNULL은 인자를 3개 이상 받을 수 있다
C. expr1이 NULL이 아니면 expr1을, NULL이면 expr2를 반환한다
D. IFNULL은 NULL 값을 다른 값으로 대체할 수 없다


데이터 리터러시) 1-4. 지표 설정

지표란?

  • 특정 목표나 성과를 측정하기 위한 구체적이고 측정 가능한 기준

주요 지표

  • Active User (활성유저)
    • 서비스마다 Active User의 정의 기준이 다르기 때문에, 여러가지 상황을 고려해서 Active User를 적절히 설정하는 것이 중요!
      주요 지표 정리, (출처)강의 자료
  • Retention Ratio (재방문율)
    • 서비스 재이용 유저 비율
    • 리텐션이 높은 서비스는 획득비용에 투자한 비용을 빠르게 회수할 수 있음 → 매우 중요한 지표!
[Retention 측정방법]
1) N-Day 리텐션
최초 사용일로부터 N일 후에 재방문한 Active User의 비율
게임, 소셜 등 습관적으로 사용하거나 반복적으로 행동을 유도하는 제품 | ex) 카카오톡, 인스타그램, 게임
N-Week, N-Month도 가능

2) Unbounded 리텐션
특정 날짜를 포함하여 그 이후에 재방문한 유저의 비율
정기적으로 반복해서 방문하는 서비스가 아닐 경우 적합 | ex) 채용 사이트, 쇼핑몰, 부동산 매물 서비스

3) Bracket 리텐션
설정한 특정 기간을 기반으로 재방문율을 측정
N-Day 리텐션을 확장한 개념 > 일/주/월 단위가 아닌 지정한 구간으로 나눔
→ 1(0일차) / 2(1-3일차) / 3(4-6일차) / 4(7-11일차)
서비스 사용주기가 길거나 주기적인 경우 적합 | ex) 식료품 배달 서비스, 세차 서비스
  • Funnel (퍼널)
    • 유저들이 어디서 이탈하는가?를 확인하기 위한 구조화
      • AARRR : 단계별 전환율을 지표화하여 서비스 보완 지점을 찾음
        • Acquisition: 유입
        • Activation: 활성화
        • Retention: 재방문(재구매)
        • Revenue: 수익
        • Referral: 추천
  • LTV (Life Time Value, 고객 평생 가치)
    • 해당 유저가 우리에게 평생 주는 이익은 얼마나 될까?
    • 고객 생애 주기: 한 명의 유저가 서비스를 사용하기 시작하여 이탈할 때까지의 기간
    • LTV는 각 서비스의 특징을 반영해 적용해야 하므로, 다양한 관점에서 산출법을 고민해야 한다! 

북극성 지표

  • 제품/서비스의 ‘성공’을 정의 = 우리 제품/서비스의 core value가 무엇인지?
  • 방향성 : 제품/사업 조직이 무엇에 최적화되어야 하고, 무엇을 포기해도 되는 지에 대한 방향 제시
  • 효율 증대 : 서로 상반된 목표에 집중하거나, 중복으로 일하는 것을 방지 (MECE한 구조)

라이브 세션) 자기주도학습을 위한 AI활용법 1회차

앞으로는 AI시대에서 AGI시대로 전환될 것이다!
언제, 얼마나 빠르게 올 것인지가 중요
AI를 '튜터+페어분석가'로 활용해서 학습 효율을 높이자

AGI (Artificial general intelligence)

: 사람처럼 범용 능력을 갖춘 고도화된 AI

 

창발적

: 개별 요소가 상호작용하면서 그 수준에서는 존재하지 않던 새로운 속성/구조가 전체에 나타나는 현상

  ex) 대규모 신경망이 스스로 ‘지능’·‘감정’ 등을 드러내는 경우

 

바이브 코딩

: 대규모 언어 모델(LLM)에 프롬프트를 입력하여 문제를 해결하는 AI 기반 프로그래밍 방식


컨디션이 좋지 않아 오전에 진행한 SQL 라이브세션 시간에 집중을 제대로 못했다.
특히나, 다른 회차보다 더 난이도 있는 내용을 다뤘기 때문에 복습 시간도 꽤 오래걸려서 학습 효율이 떨어졌다.
컨디션 관리를 잘해서 다음날 학습에 지장이 없도록 해야겠다고 느꼈다,,
또, 금요일에 있을 SQL 성취도 평가를 위해 그 동안 배웠던 내용들을 체계적으로 복습해야할 것 같다.
코드카타도 아직 낮은 레벨이니까 최대한 할 수 있는만큼 많이 풀어보고, 이전 SQL 과제와 실습 문제들을 다시 봐야겠다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함