id
|
name
|
major
|
hire_date
|
1
|
르탄이
|
피부과
|
2018-05-10
|
2
|
배캠이
|
성형외과
|
2019-06-15
|
3
|
구구이
|
안과
|
2020-07-20
|
위 테이블은 doctors이다.
30. doctors 테이블에서 전공(major)가 성형외과인 의사의 이름을 알아내는 쿼리를 작성해주세요!
SELECT name FROM doctors WHERE major = '성형외과';
31. doctors 테이블에서 각 전공 별 의사 수를 계산하는 쿼리를 작성해주세요!
SELECT major, COUNT(major) AS doctors_num FROM doctors;
//만약 의사가 여러명 일 경우에는
SELECT major, COUNT(major) AS doctors_num FROM doctors GROUP BY major;
32. doctors 테이블에서 현재 날짜 기준으로 5년 이상 근무(hire_date)한 의사 수를 계산하는 쿼리를 작성해주세요!
SELECT major, COUNT(hire_date) FROM doctors NOW() - hire_date > LIKE '5%' GROUP BY major;
//AI 확인에 따르면 NOW() - hire_date > LIKE = '5%' 에는 오류가 있다.
//이에 시간 차이를 나타내는 sql함수를 확인 하던중 DATEDIFF를 발견했다.
SELECT major, COUNT(hire_date) FROM doctors DATEDIFF(NOW(), hire_date) > 5*365 GROUP BY major;
//이렇게 DATEDIFF는 시간을 숫자로 INT로 변경시켜 계산을 해주는 방식으로 해결 가능하다.
33. doctors 테이블에서 각 의사의 근무 기간을 계산하는 쿼리를 작성해주세요!
SELECT id, name, major, DATEDIFF(NOW(), hire_date) AS work_duration FROM doctors;
*/하지만 이렇게 한다면 DATEDIFF는 INT로 바꿔버리기 때문에 ~년 ~개월 일을 했다 가 아닌
~일 일했다 라고 뜬다. 하지만 ~년 ~개월 로 표현하기는 어떻게 해야할지 모르겠다/*
AI
SELECT id, name, major, TIMESTAMPDIFF(YEAR, hire_date, NOW()) AS years,
TIMESTAMPDIFF(MONTH, hire_date, NOW()) % 12 AS months,
TIMESTAMPDIFF(DAY, hire_date, NOW()) % 365 AS days FROM doctors;
//이렇게 TIMESTAMPDTIFF를 사용하여(YEAR, MONTH, DAY)등을 사용하여 계산 할수 있어 보인다.
//디폴트는 YEAR로 보이며 MONTH 는 %12를 DAY는 % 365를 하면되는거 같다.
//하지만 이렇게 하게 되면 year, months, days가 각각 하나의 데이터 행을 가지게 되므로.
SELECT id, name, major, CONCAT(TIMESTAMPDIFF(YEAR, hire_date, NOW()), 'year',
TIMESTAMPDIFF(MONTH, hire_date, NOW()) % 12, 'months',
TIMESTAMPDIFF(DAY, hire_date, NOW()) % 365, 'days') AS duration FROM doctors;
//이렇게 표현 할 수 있다. CONCAT은 문자열을 합을 나타낸다.
'내일배움캠프 > 사전캠프 강의 (SQL)' 카테고리의 다른 글
10) 이젠 테이블이 2개입니다. (4) | 2024.09.04 |
---|---|
9) 아프면 안됩니다! 항상 건강 챙기세요! (1) | 2024.09.04 |
7) 랭크게임 하다가 싸워서 피드백 남겼어요.. (2) | 2024.09.04 |
6) 팀 프로젝트 열심히 했으니 다시 놀아 볼까요? (0) | 2024.09.04 |
5) 공부하다보니 팀 프로젝트 시간이 왓어요! (0) | 2024.09.03 |