문제
각 분기(QUARTER)별 분화된 대장균의 개체의 총 수(ECOLI_COUNT)를 출력하는 SQL 문을 작성해주세요. 이때 각 분기에는 'Q' 를 붙이고 분기에 대해 오름차순으로 정렬해주세요. 대장균 개체가 분화되지 않은 분기는 없습니다.
MySQL
- QUARTER(date)
- The QUARTER() function returns the quarter of the year for a given date value (a number from 1 to 4)
날짜를 분기로 바꿔줍니다.
- The QUARTER() function returns the quarter of the year for a given date value (a number from 1 to 4)
Parameter | Description |
date | Required. The date or datetime to extract the quarter from |
- CONCAT()
- The CONCAT() function adds two or more expressions together.
표현들을 연결해 줍니다.
- The CONCAT() function adds two or more expressions together.
Parameter | Description |
expression1, expression2, expression3, etc. |
Required. The expressions to add together. Note: If any of the expressions is a NULL value, it returns NULL |
MySQL - Code
- 문제 조건 1. 각 분기(QUARTER)별 분화된
- QUARTER 함수를 써서 각 분기를 구합니다.
- 문제 조건 2. 대장균의 개체의 총 수(ECOLI_COUNT)
- 대장균 개체는 각 ID로 나뉘기 때문에, COUNT 함수 사용합니다.
- COUNT한 값을 분기 그룹으로 나누어야 하기 때문에 GROUP BY QUARTER*
*MySQL에서는 ALIAS로 조건을 줄 수 있습니다.
- 문제 조건 3. 이때 각 분기에는 'Q' 를 붙이고
- 분기 값 + 'Q'를 해야하기 때문에 CONCAT 함수 사용합니다.
- 문제 조건 4. 분기에 대해 오름차순으로 정렬
- 오름차순 정렬이기 때문에 ORDER BY QUARTER
SELECT CONCAT(QUARTER(DIFFERENTIATION_DATE), "Q") AS QUARTER, COUNT(ID) AS ECOLI_COUNT
FROM ECOLI_DATA
GROUP BY QUARTER
ORDER BY QUARTER
Oracle
- 날짜를 분기로 변환해 주는 함수
- MySQL: QUARTER(date)
- Oracle: TO_CHAR(date, 'Q')
Oracle - Code
- 본 문제에 대해서는 현재 프로그래머스에서 MySQL만 지원하기 때문에 직접 테이블을 만들어서 풀어보았습니다.
SQL> CREATE TABLE ECOLI_DATA (
2 ID INTEGER NOT NULL,
3 PARENT_ID INTEGER,
4 SIZE_OF_COLONY INTEGER NOT NULL,
5 DIFFERENTIATION_DATE DATE NOT NULL,
6 GENOTYPE INTEGER NOT NULL
7 );
테이블이 생성되었습니다.
SQL> INSERT INTO ECOLI_DATA VALUES(1, NULL, 10, TO_DATE('2019/01/01', 'YYYY/MM/DD'), 5);
1 개의 행이 만들어졌습니다.
.
.
.
SQL> SELECT * FROM ECOLI_DATA;
ID PARENT_ID SIZE_OF_COLONY DIFFEREN GENOTYPE
---------- ---------- -------------- -------- ----------
1 10 19/01/01 5
2 2 19/05/01 3
3 1 100 20/01/01 4
4 2 17 22/04/01 4
5 2 10 20/09/01 6
6 4 101 21/12/01 22
6 행이 선택되었습니다.
SQL> SELECT TO_CHAR(DIFFERENTIATION_DATE, 'Q') AS QUARTER, COUNT(ID) AS ECOLI_COUNT
2 FROM ECOLI_DATA
3 GROUP BY TO_CHAR(DIFFERENTIATION_DATE, 'Q')
4 ORDER BY QUARTER;
QU ECOLI_COUNT
-- -----------
1 2
2 2
3 1
4 1
- 참고 자료
https://github.com/seonmin5/codingtest_Python
GitHub - seonmin5/codingtest_Python
Contribute to seonmin5/codingtest_Python development by creating an account on GitHub.
github.com
반응형