본문 바로가기
DB/SQL 예제

키워드 예제 2

by ssury94 2024. 11. 29.

세팅

더보기

INSERT INTO subscriptions (user_name, plan_name, start_date, end_date, status, price) VALUES

('김철수', 'Premium', '2023-01-01', '2023-12-31', 'Active', 12000),

('박준혁', 'Standard', '2023-07-01', '2023-12-31', 'Active', 9000),

('최수진', 'Premium', '2023-01-01', '2023-12-31', 'Active', 12000),

('김지훈', 'Premium', '2023-04-01', '2023-12-31', 'Active', 12000),

('장서현', 'Standard', '2023-06-01', '2023-12-31', 'Active', 9000),

('박다연', 'Premium', '2023-01-01', '2023-12-31', 'Active', 12000);

 

저번 실습Expired 데이터는 delete 처리됨

 

 

-- 플랜별 구독자 수 조회

SELECT plan_name, count(*) as cnt
FROM subscriptions
group by plan_name;

 

 

-- 구독상태별 총 구독요금 계산

SELECT status,sum(price) as total_price
FROM subscriptions
group by status;

 

 

-- 플랜별 평균 구독요금 계산

SELECT plan_name, avg(price)as avg_price
FROM subscriptions
group by plan_name;

 

-- 구독자가 2명 이상인 플랜의 이름과 구독자 수 조회

SELECT plan_name, count(*)as usercount
FROM subscriptions
group by plan_name
HAVING usercount >= 2;

 

-- 총 구독 요금이 30000 이상인 구독상태 조회

SELECT status, sum(price)as total_price
FROM subscriptions
group by status
having total_price>=30000;

 

-- 플랜별로 2023년 6월 1일 이후 시작된 구독자 수를 조회하되, 구독자가 2명 이상인 플랜만 조회, 구독자가 많은 순서로 정렬

SELECT plan_name, count(plan_name)as plan_user
FROM subscriptions
where start_date>='2023-06-01'
group by plan_name
HAVING plan_user>=2
order by plan_user desc;

 

Select 구문의 count(plan_name) 는 count(*) 으로 적어주기

  1. count(*) 모든 행을 세기 때문에 더 효율적입니다.
  2. count(plan_name)  plan_name 컬럼이 NULL이 아닌 행만 세게 됩니다.
  3. 구독 테이블에서는 일반적으로 plan_name 이 NULL일 가능성이 낮지만, 데이터의 완전성을 보장하기 위해 count(*) 를 사용하는 것이 더 안전합니다.

수정한 쿼리

SELECT plan_name, count(*) as plan_user
FROM subscriptions
where start_date>='2023-06-01'
group by plan_name
HAVING plan_user>=2
order by plan_user desc;

 

-- 상태가 Active인 구독자의 플랜별 총 구독 요금을 계산하되, 총 구독 요금이 20000 이상인 플랜만 조회, 총 구독 요금이 높은 순서대로 정렬

SELECT plan_name, sum(price)as plan_price
FROM subscriptions
where status='Active'
group by plan_name
having plan_price>=20000
order by plan_price desc;