[MySQL] SELECT/GROUP BY 구문 정리 FROM 프로그래머스
해당 게시글은 비전공자이자 쌩초보 개발자 지망생이 작성한 글로 정확하지 않을 수 있으니 참고해주시길 바랍니다!
피드백과 정보 정정 댓글은 환영입니다 :)
프로그래머스에 나오는 문제들 풀면서 새롭게 알게 된 구문들을 정리해보자!
- table_name 의 전체 행 개수 가져오기
SELECT COUNT(*) FROM table_name;
- table_name의 전체 행 개수를 cnt 라는 이름으로 가져오기
SELECT COUNT(*) as cnt FROM table_name;
- table_name에서 name 열에 해당하는 행의 개수를 중복 없이, NULL 값을 제외하고 cnt라는 이름으로 가져오기
SELECT COUNT(DISTINCT name) as cnt FROM table_name;
- 프로그래머스 SQL 고양이와 개는 몇 마리 있을까?
* GROUP BY 구문은 주어진 값을 기준으로 그룹을 묶어준다. 이 구문 사용 이후에 COUNT를 써주게 되면 전체 행의 개수가 아니라, 해당 열의 유형별로 개수를 가져올 수 있다. 또한 HAVING 구문은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용되는 반면, WHERE 구문은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) as cnt
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC
- 프로그래머스 SQL NULL 처리하기
* IFNULL(변수, NULL 일 때 대체하고 싶은 값)을 써주면 NULL 대신 해당 값이 들어가게 된다.
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name'), SEX_UPON_INTAKE
FROM ANIMAL_INS
- 프로그래머스 SQL 루시와 엘라 찾기
* WHERE 변수 값 IN (...) 구문을 통해 조건의 범위를 여러개로 설정할 수 있다.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN
('Lucy', 'Ella', 'Pickle','Rogan','Sabrina','Mitty')
ORDER BY ANIMAL_ID ASC
- 프로그래머스 SQL 이름에 el이 들어가는 동물 찾기
* CONCAT 함수는 여러 문자열을 하나로 합쳐주는 함수이다. 이를 정규표현식처럼 사용하여 해당 형식을 갖는 문자열을 찾아낼 수 있다. MYSQL은 기본적으로 대소문자를 구분하지 않는다고 한다. 그래서 대소문자 구분없이 다 검색 가능.
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE NAME LIKE CONCAT('%', 'el', '%') AND ANIMAL_TYPE = 'Dog'
/* WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'Dog'도 가능, 아래 참고*/
ORDER BY NAME ASC
- 프로그래머스 SQL 중성화 여부 파악하기
* CASE WHEN (조건문) THEN (구문) ELSE (구문) END 의 형태를 갖고 있다. 해당 문제에서는 중성화 여부를 나타내는 새로운 열을 만들었고, CASE문을 통해 이 열의 내용을 채우고 있다. '%Neutered%', 'Spayed'를 통해 해당 단어가 들어간 칸을 찾아내고 있다.
SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O'
ELSE 'X' END
AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC
- 프로그래머스 SQL DATETIME에서 DATE로 형 변환
* DATE_FORMAT 함수는 주어진 날짜를 원하는 날짜 형식대로 출력하게 해준다. 어떤 포맷이 어떤 출력을 내는지는
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
MySQL :: MySQL 8.0 Reference Manual :: 12.7 Date and Time Functions
12.7 Date and Time Functions This section describes the functions that can be used to manipulate temporal values. See Section 11.2, “Date and Time Data Types”, for a description of the range of values each date and time type has and the valid formats
dev.mysql.com
를 참고해보자!
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC
느낀 점
python 다음으로 가장 사람 언어 같은 기분이 든다...!