MYSQL 공부 1일차

진이·2023년 3월 23일
0

mysql

목록 보기
1/5
DROP DATABASE IF EXISTS EXAMPLES1;
CREATE DATABASE EXAMPLES1;

USE EXAMPLES1;

CREATE TABLE TEST_SCORE -- 학생 테이블
(
  STU_NAME    	VARCHAR(10) NOT NULL, -- 이름
  STU_MAJOR    VARCHAR(10) NOT NULL,  -- 인원수
  STU_REGION	VARCHAR(10) NOT NULL, -- 소속 지역
  STU_AGE	INT NOT NULL,             -- 나이
  TEST_NO	INT,					  -- 몇 번째 시험인지
  TEST_RES	INT			  			  -- 점수
);

INSERT INTO TEST_SCORE VALUES('진이', '컴공', '구로구', 23, 1, 90);
INSERT INTO TEST_SCORE VALUES('진이', '컴공', '구로구', 23, 2, 99);
INSERT INTO TEST_SCORE VALUES('철수', '컴공', '강남구', 21, 1, 70); 
INSERT INTO TEST_SCORE VALUES('철수', '컴공', '강남구', 21, NULL, NULL);
INSERT INTO TEST_SCORE VALUES('영희', '컴공', '구로구', 23, NULL, NULL);
INSERT INTO TEST_SCORE VALUES('영희', '컴공', '구로구', 23, 2, 50);
INSERT INTO TEST_SCORE VALUES('희순', '전자', '강남구', 20, 1, 70);
INSERT INTO TEST_SCORE VALUES('희순', '전자', '강남구', 20, 2, 65);
INSERT INTO TEST_SCORE VALUES('희수', '전자', '서초구', 20, 1, 80);
INSERT INTO TEST_SCORE VALUES('희수', '전자', '서초구', 20, 2, 80);

이런 데이터가 주어졌을 때

문제1 -> 각 전공별로 제 1시험 1등과 제 2시험 1등의 정보를 추출하라! (단 동명이인은 없다는 것을 전제로 한다.)

각 전공별로, 각 시험 별로 묶어주어야 한다.
묶어줄 땐 GROUP BY를 활용할 수 있겠다.
GROUP BY STU_MAJOR,TEST_NO까지 생각해낼 수 있겠다.
시험을 치지 않아서 NULL인 것들은 걸러내야 하기에 WHERE문을 통해 걸러주도록 한다.
그러나 이러면 다른 정보들을 가져올 수 (SELECT)할 수 없게 된다.
일단 STU_MAJOR, TEST_NO, MAX(TEST_RES)까지 뽑아올 수 있겠다.
동명이인이 없으므로 STU_MAJOR, TEST_NO, MAX(TEST_RES)를 통해 역으로 다시 그 학생을 특정해야 한다.

이를 코드로 나타내어 보면

SELECT * FROM TEST_SCORE WHERE (STU_MAJOR, TEST_NO, TEST_RES) IN (SELECT STU_MAJOR, TEST_NO, MAX(TEST_RES) FROM TEST_SCORE WHERE TEST_NO > 0 GROUP BY STU_MAJOR, TEST_NO);

가 되겠다.

profile
최선을 다할게

0개의 댓글