SQL

[1203 TIL] -2 데이터분석 조별과제 쿼리짜기

sjy0074 2024. 12. 3. 21:35

SELECT

date_format(started_at, '%y %m') AS Used_date,

member_casual,

count(*) AS user_count,

round(count(*) * 100.0 / sum(count(*)) over(PARTITION BY date_format(started_at, '%y %m')),2) AS percentage

FROM divvy

GROUP BY date_format(started_at, '%y %m'), member_casual

 

오늘 라이브 세션으로 배웠던 윈도우함수를 사용해보았다. round 는 소숫점 x번째까지 나타내는 함수.

월별로 데이터를 그룹핑(파티션으로 나눔)하고 그룹별로 데이터를 정렬하였다. 정렬요건은 따로 넣지 않았고 연산 범위도 설정해야 하는데 이는 전부라서 생략하고 바로 계산돌렸다. 이후 이를 백분율로 보고싶어서 count(*)*100.0을 쟤로 나눠주고 소숫점 둘째자리까지 보이게 작성하였다.

그리고 월별, 멤버십유무별로 그룹핑하였다.


 

--윈도우 함수 기본 문법

 

select 윈도우함수(컬럼1) over (
[partition by 컬럼2]--그룹화
[order by 컬럼3 asc|desc]--정렬
[rows|range between A and B]-- 계산범위
) as 결과
from 테이블;

 


 


select member_casual , end_station_name , sum(end_station_name) over (partition by end_station_name order by member_casual asc) as end_station_count

from divvy

where end_station_name <> ""

group by member_casual , end_station_name

order by 1 asc, 3 desc

limit 10

 

 

 멤버십 유무별로 종착지 내림차순으로 정렬하였다. 그 중 빈값이 있어 이즈낫널 했는데 빈칸""이어서 그 자료는 제외시키고 조회하였다.

가장 많이 반납한 종착지순으로 10개 정렬하여 확인하였다.