ALL 53

이탈률, 종료율 해석 그리고 Google Analytics 4에서의 변화

구글 애널리틱스 공부를 하는 도중 이탈률과 종료율의 의미를 해석하기 어려웠고, 다시 정의를 찾아보니 Google Analytics의 설명이 직관적으로 안되어있어 공부할 겸 정리했습니다. 정리하며 GA4(구글 애널리틱스 4)로 바뀌면서 생긴 변화도 같이 찾아보았는데, GA4에서는 이탈률과 종료율이 없어 보입니다. 명칭 정리에 대한 글은 이곳에 있습니다. 이탈률 (UA 기준) 이탈률은 영어로 bounce rate라 하며, email bounce가 반송을 말하듯 사용자가 사이트에는 들어왔지만 그냥 나가는 비율을 말합니다. 이탈률 계산은 세션(session)이 시작한 페이지가 중요합니다. 즉, 페이지 A의 이탈률은 페이지 A에서 시작한 접속(세션) 중 바로 나가는(bounce) 세션을 의미입니다. 자 그렇다면 ..

[쉽게 쓴 SQL] 서브쿼리란?

메인쿼리가 아닌것. 종류로는 중첩 서브쿼리, 인라인 뷰, 스칼라 서브쿼리가 있다 메인 쿼리란, SELECT avg(f.rental_rate) FROM film f ; 이런 것. SELECT f.film_id ,f.title ,f.rental_rate FROM film f WHERE f.rental_rate > 2.98; 또는 이런 것. 이걸 하나의 SQL문으로 만들 수 있을까? 중첩 서브쿼리 괄호를 써서 사용한다 SELECT f.film_id ,f.title ,f.rental_rate FROM film f WHERE f.rental_rate > ( SELECT avg(f.rental_rate) FROM film f ); 인라인 뷰 from 절 내에 괄호에 있는 쿼리 SELECT f.film_id ,f.t..

[쉽게 쓴 SQL] EXCEPT

[연산] 집합 두 개 중에 1개에만 해당되는 내용을 보고 싶을 때 엄청나게 많이 쓰인다! 재고가 있는 film_id 와 이름을 추출하려면? SELECT DISTINCT f2.film_id,f2.title FROM film f2 , inventory i2 WHERE f2.film_id = i2.film_id ORDER BY f2.film_id ; 958개의 결과가 있음 재고가 없는 film_id 와 이름을 추출하고 싶다 전체 필름 중에서 재고가 있는 것을 빼면 된다. '재고'라는 column이 있는 것이 아니므로, OUTER JOIN으로 '재고' IS NULL은 불가. SELECT f3.film_id, f3.title FROM film f3 EXCEPT SELECT DISTINCT f2.film_id, f..

[쉽게 쓴 SQL] INTERSECT

[연산] 두 집합의 교집합을 보고 싶다 교집합? 이전에 했던 INNER JOIN과 같지 않은가? 실제 쓰임에서는 INNER JOIN 과 같아 잘 안쓴다. 실습 세팅 CREATE TABLE employees ( employee_id serial PRIMARY KEY ,employee_name varchar(255) NOT null ); CREATE TABLE keys ( employee_id int PRIMARY KEY ,effective_date date NOT NULL ,FOREIGN key(employee_id) REFERENCES employees(employee_id) ); CREATE TABLE hipos ( employee_id int PRIMARY KEY ,effective_date date..

[쉽게 쓴 SQL] UNION + ALL

UNION [연산] : 집합(sql을 통해 추출된 결과)을 하나로 합칠 때 사용한다. 중복된 데이터를 생략해 준다. UNION ALL [연산] : 집합(sql을 통해 추출된 결과)을 하나로 합칠 때 사용한다. 중복 된 데이터도 보여 준다. union all이 더 많이 쓰인다. 실습 닮은 두 테이블 sales2007_1, sales2007_2를 만든다. CREATE TABLE sales2007_1 ( name varchar(50) ,amount NUMERIC(15, 2) ); CREATE TABLE sales2007_2 ( name varchar(50) ,amount numeric(15,2) ); INSERT INTO sales2007_1 VALUES ('mike',150000.25) ,('jonin',1..

[쉽게 쓴 SQL] LAG, LEAD 함수

* lag : 뒤처지다 * lead : 이끌다 이전 행의 값 또는 다음 행의 값을 알고 싶을 때 사용. 각 제품 보다 1단계 싼(이전 행의) 제품의 가격을 같이 보고, 그 차이를 알고 싶다. -LAG SELECT a.product_name ,b.group_name ,a.price ,LAG (a.price, 1) OVER (PARTITION BY b.group_name ORDER BY a.price) AS prev_price ,a.price - LAG (a.price, 1) OVER (PARTITION BY b.group_name ORDER BY a.price) AS cur_prev_diff FROM product a INNER JOIN product_group b ON (a.group_id = b.gro..

[쉽게 쓴 SQL] FIRST_VALUE, LAST_VALUE 함수

특정 컬럼의 첫 번째, 혹은 마지막 값을 뽑고 싶다. 예제 세팅 글 각 제품 그룹에서 가장 낮은 값을 알고 싶다 - FIRST_VALUE SELECT a.product_name ,b.group_name ,a.price ,FIRST_VALUE (a.price) OVER (PARTITION BY b.group_name ORDER BY a.price) AS lowest_price_per_group FROM product a INNER JOIN product_group b ON (a.group_id = b.group_id); 그럼 가장 비싼 값을 알고 싶다면? SELECT a.product_name ,b.group_name ,a.price ,FIRST_VALUE (a.price) OVER (PARTITION B..

[쉽게 쓴 SQL] ROW_NUMBER, RANK, DENSE_RANK 차이

*dense : 빽빽한, 밀집한 세 개의 함수는 모두 순위를 매길 때 사용하지만, 조금씩의 차이가 있다. 예제 세팅 글 제품 가격이 낮은 순서로 순위를 매기고 싶다. 단, 같은 가격에도 순위 차이가 생기도록 한다. - ROW_NUMBER SELECT a.product_name ,b.group_name ,a.price ,ROW_NUMBER () OVER (PARTITION BY b.group_name ORDER BY a.price) FROM product a INNER JOIN product_group b ON (a.group_id = b.group_id); Postgresql에서는 같은 값을 가지는 ROW 중 ROW ID 가 높은 행이 우선 정렬된다 (desc 정렬에도 동일하다) = SELECT * FR..

[SQL 문법] AVG 함수

group_name 별 평균 가격을 알고 싶다 이전 글에서 준비한 product, product_group 테이블을 inner join 후 avg 함수 사용 SELECT a.group_name , avg(price) FROM product_group a INNER JOIN product b ON (a.group_id = b.group_id) GROUP BY a.group_name; 제품의 가격과 그 제품의 그룹 별 평균 가격을 같이 보고 싶다 이 때 분석함수를 사용 SELECT b.product_name , b.price , a.group_name , avg(b.price) OVER(PARTITION BY a.group_name) FROM product_group a INNER JOIN product b..

[SQL 문법] 분석 함수

집계의 결과와 테이블의 내용을 같이 보고 싶기 때문에 사용 실습 세팅 CREATE TABLE product_group ( group_id serial PRIMARY KEY, group_name varchar (255) NOT null ); CREATE TABLE product ( product_id serial PRIMARY KEY ,product_name varchar(255) NOT null ,price decimal (11,2) ,group_id int NOT null ,FOREIGN key(GROUP_id) REFERENCES product_group (group_id) ); INSERT INTO product_group (group_name) VALUES ('smartphone') ,('lapt..