
DISTINCT(NAME) ❌
DISTINCT NAME ⭕
SELECT ANIMAL_ID,
NAME,
CASE WHEN SEX_UPON_INTAKE LIKE "%Spayed%" THEN "O"
WHEN SEX_UPON_INTAKE LIKE "%Neutered%" THEN "O"
ELSE "X" END 중성화
FROM ANIMAL_INS
#동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요.
#중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
# Spayed: 중성화된(암컷)
# Neutered: 중성화된(수컷)
# Intact: 손대지 않은
SELECT CATEGORY,
COUNT(PRODUCT_CODE) PRODUCTS
FROM
(SELECT SUBSTR(PRODUCT_CODE,1,2) CATEGORY,
PRODUCT_CODE,
PRICE
FROM PRODUCT) A
GROUP BY CATEGORY
날짜 데이터에 대해
| 설명 | 함수 |
|---|---|
| 날짜에 간격을 더하기 | DATE_ADD(date, INTERVAL value unit) |
| 날짜에서 간격을 빼기 | DATE_SUB(date, INTERVAL value unit) |
| 두 날짜 사이의 일 수 계산 | DATEDIFF(date1, date2) |
| 두 날짜 시간 값 사이의 차이를 특정 단위로 계산 | TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2) |
| 날짜 값을 지정된 형식으로 변환 | DATE_FORMAT(date, format) |
| 날짜 또는 날짜 시간 값에서 연도, 월, 일 추출 | YEAR(date), MONTH(date), DAY(date) |
| 날짜 시간 값에서 시, 분, 초 추출 | HOUR(datetime), MINUTE(datetime), SECOND(datetime) |
특정 날짜에 주어진 간격을 더합니다.
함수: DATE_ADD(date, INTERVAL value unit)
------
예시: SELECT DATE_ADD('2024-06-28', INTERVAL 10 DAY) AS new_date;
------
결과: 2024-07-08
특정 날짜에서 주어진 간격을 뺍니다.
함수: DATE_SUB(date, INTERVAL value unit)
------
예시: SELECT DATE_SUB('2024-06-28', INTERVAL 10 DAY) AS new_date;
------
결과: 2024-06-18
두 날짜 사이의 일(day) 수를 계산합니다.
함수: DATEDIFF(date1, date2)
------
예시: SELECT DATEDIFF('2024-06-28', '2024-06-18') AS days_diff;
------
결과: 10
두 날짜 또는 날짜 시간 값 사이의 차이를 특정 단위로 계산합니다.
함수: TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
------
예시: SELECT TIMESTAMPDIFF(MINUTE, '2024-06-28 12:00:00', '2024-06-28 14:30:00') AS minutes_diff;
------
결과: 150
날짜 값을 지정된 형식으로 변환합니다.
함수: DATE_FORMAT(date, format)
------
예시: SELECT DATE_FORMAT('2024-06-28', '%Y-%m-%d') AS formatted_date;
------
결과: 2024-06-28
| 형식 지정자 | 설명 |
|---|---|
%a | Abbreviated weekday name. |
%Y | Year, in 4-digits. |
%M | Full name of the month. |
%m | Months (from 01-12). |
%d | Day of the month, numeric (00 .. 31). |
%e | Day of the month (from 1-31). |
%H | Hour (from 00-23). |
%k | 시간(hour) (0부터 23까지). |
%l | 시간(hour) (1부터 12까지). |
%i | Minutes (from 00-59). |
%s | Seconds (from 00-59). |
각각 날짜 또는 날짜 시간 값에서 연도, 월, 일, 시, 분, 초를 추출합니다.
예시:
예시: SELECT YEAR('2024-06-28'), MONTH('2024-06-28'), DAY('2024-06-28');
---
결과: 2024, 6, 28
SELECT DATE("The date is 2017-06-15");
| DATE("2017-06-15 09:34:21") |
|---|
| 2017-06-15 |
EX)
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
-> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
-> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');
-> 128885

USER_INFO 테이블에서 2021년에 가입한 회원 중
#나이가 20세 이상 29세 이하인 회원이 몇 명인지 구하라.
SELECT COUNT(USER_ID)
FROM USER_INFO
WHERE DATE_FORMAT(CAST(JOINED AS DATE), '%Y') = 2021 AND
AGE >= 20 AND
AGE <= 29
#동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요.
#중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.
# Spayed: 중성화된(암컷)
# Neutered: 중성화된(수컷)
# Intact: 손대지 않은
/*
SELECT ANIMAL_ID,
NAME,
CASE WHEN SEX_UPON_INTAKE = LIKE "Spayed" THEN "O"
WHEN SEX_UPON_INTAKE = LIKE "Neutered" THEN "O"
ELSE "X" END 중성화
FROM ANIMAL_INS
LIKE 함수는 그냥 바로 적어라. = LIKE 하면 안돼~
*/
SELECT ANIMAL_ID,
NAME,
CASE WHEN SEX_UPON_INTAKE LIKE "%Spayed%" THEN "O"
WHEN SEX_UPON_INTAKE LIKE "%Neutered%" THEN "O"
ELSE "X" END 중성화
FROM ANIMAL_INS
SELECT HOUR(DATETIME) HOUR,
COUNT(ANIMAL_ID) COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) <= 19
GROUP BY HOUR
ORDER BY HOUR
SELECT B.CATEGORY,
SUM(SALES) TOTAL_SALES
FROM BOOK_SALES S INNER JOIN BOOK B ON S.BOOK_ID = B.BOOK_ID
WHERE DATE_FORMAT(S.SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY B.CATEGORY
ORDER BY CATEGORY
SELECT ANIMAL_ID,
NAME
FROM
(
SELECT GO.ANIMAL_ID,
GO.NAME,
TIMESTAMPDIFF(DAY, COME.DATETIME, GO.DATETIME) DURATION # 2. TIMESTAMPDIFF()함수로 기간 차이 구하기
FROM ANIMAL_OUTS GO LEFT JOIN ANIMAL_INS COME
ON GO.ANIMAL_ID = COME.ANIMAL_ID # 1. 조인
ORDER BY DURATION DESC
) A # 까먹지 마라
LIMIT 2