<김씨 성을가진 학생수 구하기]
SELECT COUNT(SUBSTR(name,1,1)) as name_cut
FROM users u
where name like '김%'
- name컬럼에서 성 부분만 조회/카운트 , where 김으로 조건 부여(왜인지 '김'으로 하면 안나오드라)
SELECT SUM(name like '김%') as name_cut
FROM users u
- sunstr사용안하고 like 사용해서 김**의 수만 합침
SELECT count(distinct(user_id)) as name_cnt
FROM
users
where substr(name,1,1) = '김'
- user_id카운트/ name앞글자만 조회하고 거기서 김인 id인 조건부여
결론: 상관은 없다
다만 3번째 거는 고유 id의 수를 셈
1,2번은 김으로 시작하는 이름의 총 갯수, 3번은 고유 id를 세는것
-------------------------------------------------------------------------------------------------------------------------------------------------
SELECT SUBSTR(created_at,1,10) as created_at,
ROUND(AVG(point))
FROM point_users
group by 1
- 이건 날짜가 문자열
SELECT
DATE(p.created_at) AS created_at,
ROUND(AVG(p.point)) AS average_points
FROM
point_users p
GROUP BY
DATE(p.created_at);
- 표시상 created_at는 날짜형인데 이걸 date를 사용하면 날짜형 그래도 시간을 빼고 추출할수 있음
- substr은 데이터형으로 뽑기에 이 상황에서 부적합
- round 함수는 반올림할때 사용함
----------------------------------------------------------------------------------------------------------------------------------------------------
- 포인트를 획득한 학생한테 메일을 보내려 한다.
- users테이블에는 존재하나, point_users테이블에 존재하지 않는 학생을 제외
- 이 학생들은 point를 0으로 표시하여 처리
해결과정
1) users테이블과 point_users 테이블을 left join으로 연결
2) null로 표시된 학생의 포인트를 0으로 변경
3) 표시할 컬럼은 users_id(두 테이블의 공통 컬럼), email, point
SELECT u.user_id,
u.email,
COALESCE(pu.point,0) as point
FROM users u left join point_users pu on u.user_id = pu.user_id
order by pu.point desc
- COALESCE함수는 NULL을 다른 값으로 변환해 출력
- 기본구조는 COALESCE(컬럼명, '값') 값에 문자는' ' , 숫자는 그냥 입력 숫자를 ' '으로 입력하면 문자로 출력됨
'내일배움캠프 > 사전캠프 퀘스트' 카테고리의 다른 글
[내일배움캠프]_달리기반 Lv5 (1) | 2024.12.09 |
---|---|
[내일배움캠프]_달리기반 LV4 (0) | 2024.12.05 |
[내일배움캠프]_사전캠 SQL 퀘스트 5일차 (0) | 2024.12.04 |
[내일배움캠프]_사전캠 SQL 퀘스트 4일차 (0) | 2024.12.02 |
[내일배움캠프]_사전캠 SQL 퀘스트 3일차 (0) | 2024.12.02 |