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개 정렬하여 확인하였다.
'SQL' 카테고리의 다른 글
[1204 TIL]sql 코드카타(ifnull,where) (2) | 2024.12.04 |
---|---|
[1203 TIL] sql코드카타(substr,hour) (0) | 2024.12.03 |
[1202 TIL] sql 코드카타(like,substr,when) (0) | 2024.12.02 |
[1129 TIL] (2) | 2024.11.29 |
[1128 TIL] 알고리즘SQL 코드카타 , WHERE / HAVING의 차이 (1) | 2024.11.28 |