[MySQL] SELECT 데이터 추출하기
1. 잡은 물고기의 평균 길이 구하기
코딩테스트 연습 - 잡은 물고기의 평균 길이 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Logic
1) NULL값을 다른 값으로 대체하여 표현
IFNULL (? , ?)
ex) 컬럼(LENGTH)이 NULL이면 0으로 치환하여 반환
SELECT IFNULL(LENGTH,0) FROM FISH_INFO;
2) 특정 컬럼의 평균값
AVG(컬럼명)
ex) 컬럼(LENGTH)의 평균
SELECT AVG(LENGTH) FROM FISH_INFO;
3) 결과값 반올림하기
ROUND(결과값, 반올림 자릿수)
ex) 결과값의 3번째 자리까지 반올림
SELECT ROUND(AVG(LENGTH),3) FROM FISH_INFO;
4) 추출한 결과 컬럼명을 다른 이름으로 나타내기
SELECT 컬럼명 AS '설정할 다른 컬럼명' FROM 테이블명;
결과
SELECT ROUND(AVG(IFNULL(LENGTH,10)),2) AS 'AVERAGE_LENGTH' FROM FISH_INFO;
2. 잔챙이 잡은 수 구하기
코딩테스트 연습 - 잔챙이 잡은 수 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Logic
1) NULL값 세기
COUNT(컬럼명)
SELECT COUNT(*) FROM FISH_INFO;
=> COUNT(*)는 NULL값을 포함하여 계산한다.
SELECT COUNT(LENGTH) FROM FISH_INFO;
=> COUNT(컬럼명)은 NULL값을 포함하지 않고 계산한다.
결과
SELECT COUNT(*) - COUNT(LENGTH) AS 'FISH_COUNT' FROM FISH_INFO;
=> NULL까지 센 결과값에서 NULL값이 없는 결과값을 빼면 된다.
=> 결과적으로 NULL값에 대한 COUNT만 나오게 된다.
3. Python 개발자 찾기
코딩테스트 연습 - Python 개발자 찾기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Logic
1) 컬럼에서 특정 문자열 검색하기
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '문자열';
ex) Javascript 스킬이 있는 사람의 정보 출력
SELECT * FROM DEVELOPER_INFOS WHERE SKILL_1 LIKE 'Python' OR SKILL_2 LIKE 'Python';
2) 결과 오름차순으로 나타내기
SELECT 컬럼명 FROM 테이블명 ORDER BY 컬럼명 ASC;
=> ORDER BY 뒤에 붙는 컬럼명은 정렬 기준이 되는 컬럼이다.
ex) ID를 기준으로 오름차순 정보 출력
SELECT * FROM DEVELOPER_INFOS ORDER BY ID ASC;
+) 내림차순은 DESC로 나타내면 된다.
결과
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPER_INFOS WHERE SKILL_1 LIKE 'Python' OR SKILL_2 LIKE 'Python' OR SKILL_3 LIKE 'Python' ORDER BY ID ASC;
4. 조건에 부합하는 중고거래 댓글 조회하기
코딩테스트 연습 - 조건에 부합하는 중고거래 댓글 조회하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Logic
1) 테이블 조인하기 (Inner Join)
SELECT 컬럼명 FROM 첫 번째 테이블명 INNER JOIN 두 번째 테이블 ON 조인 조건 [WHERE 검색 조건];
=> INNER JOIN을 JOIN이라고만 써도 INNER JOIN으로 인식한다.
=> ON 뒤의 조인 조건은 어떤 컬럼을 기준으로 JOIN할 것인지에 대한 내용을 작성한다.
ex) ON A.BOARD_ID = B.BOARD_ID
= A 테이블의 BOARD_ID와 B 테이블의 BOARD_ID가 같은 것을 기준으로 JOIN한다.
2) 날짜 포맷 정하기
SELECT DATE_FORMAT(컬럼명, '%Y-%m-%d') AS 지정컬럼명 FROM 테이블명;
=> AS로 출력 컬럼명을 따로 지정해주지 않으면 DATE_FORMAT(컬럼명, ~) 상태로 컬럼명이 출력된다.
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T');
> 2021-03-30 12:00:00
SELECT DATE_FORMAT(NOW(), '%Y%m%d');
> 20210330
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%S');
> 20210330100000
3) 날짜 조건 필터링
SELECT 컬럼명 FROM 테이블명 WHERE SUBSTR(컬럼명, 시작인덱스, 끝인덱스) = '비교할 문자열';
=> WHERE 절에서 SUBSTR()함수를 사용해 필드를 잘라내고 비교한다.
4) 다중정렬
SELECT 컬럼명 FROM 테이블명 WHERE 조건 ORDER BY 컬럼명1 ASC/DESC, 컬럼명2 ASC/DESC;
=> ORDER BY 다중정렬을 할 때, 왼쪽부터 순차적으로 정렬되기 때문에 순서를 고려해야 한다.
(우선순위가 높은 순서대로 나열)
ex) column1을 기준으로 내림차순 정렬 후, column1이 같은 값이면 column2로 내림차순 정렬한다.
SELECT * FROM A.TABLE ORDER BY column1 desc, column2 desc;
결과
SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS, DATE_FORMAT(B.CREATED_DATE,'%Y-%m-%d') AS CREATED_DATE FROM USED_GOODS_BOARD AS A INNER JOIN USED_GOODS_REPLY AS B ON A.BOARD_ID = B.BOARD_ID WHERE SUBSTR(A.CREATED_DATE,1,7) = '2022-10' ORDER BY B.CREATED_DATE ASC, A.TITLE ASC;