우리 회사는 매주/ 매월 지표 분석을 하는데, 그때마다 어드민에서 원하는 특정 데이터값을 추출하는 게 쉽지않다. 그래서 SQL를 사용해서 기간별 특정 유저의 총 합계를 구하고 있다. 아래 내용은 내가 SQL 강의를 토대로 실제 쿼리를 작성하고 있는 방법이다. | 미션 -- Q1. 24년 3월 내 파트너 권한을 가진 모든 유저의 총 합계를 구하시오 -- 단, 파트너는 개인 파트너 및 비즈니스 파트너 두 가지 유형이 존재함 | 먼저 해야할 것 일단, 쿼리를 짜기 전에 먼저 확인해야할 것은 해당 테이블에 어떤 컬럼이 있는 지 확인을 해야한다. 이때는 LIMIT절을 사용해서 열 개의 ROW 정도만 확인한다. 그럼 컬럼에 어떤 항목들이 어떤 타입으로 입력되어 있는지 확인할 수 있다. SELECT * FROM 'U..
PO로로/오늘도 SQL
1시간이라는 짧은 점심시간을 활용하여 데이터리안 : SQL 데이터 분석 캠프 수업을 듣고 있다. 일단 오늘은 어제 배운 GROUP BY 함수에 대해 복습하고자 한다. ( 데이터리안 규정상 수업 자료는 배포가 어려우므로 최대한 비슷하게 가공해서 업데이트 하려고 함) 일단 GROUP BY는 ~별로 ~의 연산을 구하거나 어쨌거나 특정 조건과 결과값을 그룹핑 해주는 주요 요소인데, 요일별로 매출액의 합계를 구하거나 요일별로 가입한 회원의 수를 구할 수 있다. 👇 자문자답 케이스 -- Q1. 날짜별 가입한 회원의 수를 나열하시오 SELECT DATE(created_at) AS 가입일 , COUNT(*) AS 회원수 FROM `USER` u WHERE CREATED_AT BETWEEN '2024-01-01' AND..
오늘의 문제. 한국 도시 중에 인구가 100만이 넘는 도시를 조회하여 인구순으로 내림차순하세요. [힌트] 테이블명: City / 컬럼명: name, population 오름차순, 내림차순에 대해서는 배웠지만 까먹은 상태였다. 하지만 모르면 배우면서 하면 되니까 문제없음! - 일단 나의 접근 방식은 이러하다. ① 도시명(name)을 조회하는 것이 궁극적인 목적 ② "도시" 테이블에서 추출하면 되겠지? ③ where 조건에서, 인구가 100만이 넘는 것을 설정해주고! ④ 마지막, 내림차순으로 정리하면 될 것이야. (내림차순 하는 방법은 까묵..) == 한국 도시 중에 인구가 100만이 넘는 도시를 조회하여 인구순으로 내림차순하세요. [힌트] 테이블명: City / 컬럼명: name, population ==..
== country 테이블에서 중복을 제거한 Continent를 조회하세요== 일단, 중복을 제거하는 데에 쓰이는 함수에 대해서 알아보면 끝나는 간단한 문제이다. 예를 들어서, 구성원들의 나이를 추출하고 싶을 경우 SELECT AGE FROM MEMBER; 으로 간단히 추출할 수 있지만 이럴 경우 중복되는 나이들이 겹겹이로 모두 출력될 것이다. 이럴 때 쓰는게 뭐다? DISTINCT다! -- 1. country 테이블에서 중복을 제거한 Continent를 조회하세요. SELECT DISTINCT(Continent) FROM country 이렇게 되면, 중복되는 나이는 제거되고 노출되지롱! 오늘은 좀 쉬엄쉬엄 가고 싶으니 간단한 문제로 마무리 :D
[다음문제] 아이디 'jhw1010' 유저가 보낸 시나리오 타입별 알림톡 발송건수를 계산하세요. ★힌트 (Group by) 사용해서 isSystem이 N/Y로 구분! 단, 시스템 발송건은 제외 (ab_alimtalk_tran_info의 isSystem이 'Y'일 경우 제외) 일단 알림톡 발송 건수를 계산하락 했으니, 실질적으로 추출하고 싶은 컬럼은 totalcount. 그리고 어느 테이블에서 꺼낼 것이냐 했을 때, ab_alimtalk_tran_info가 맞다. 그 다음 조건 1번은 jhw1010 유저가 보냈야하고 그 다음은 시스템 발송건은 제외가 되어야 한다. 그리고 마지막으로 "타입별" > 알림톡 발송건수를 계산해야 하니 타입별을 Group by 하는 것으로 생각했다. NOT NULL 은 NULL값을..
JOIN 문제일 것이라 예상 중. 납부 방법이 등록되어 있는 유저들의 아이디! 와 요금 관리자명을 불러오라는 것은 유저 정보와 PAYMENT_METHOD의 조인의 결과를 추출하는 문제가 아닐까 싶다. 1. 납부방법이 등록되어 있는 유저들의 아이디와 요금관리자명을 불러오세요. (요금관리자가 NULL일 경우 제외) SELECT a.userId, b.billingAdmin FROM ab_user a INNER JOIN ab_payment_method b ON a.userSeq = b.userSeq WHERE billingAdmin IS NOT NULL; 해석) 유저 ID는 ab_user 테이블에서 가져오는 것이 맞고, 요금관리자명(billingAdmin)은 ab_payment_method 테이블에서 불러오는 ..
상품명과 상품타입 테이블과 탈퇴 유저 정보가 있는 테이블을 조인하는 문제일 것이야. (상품명= 시나리오명) @ab_scenario @ab_user_withdrawal type, scenarioName SQL 풀이 -- FROM 과 JOIN 은 테이블을 불러오는 것 -- SELECT scenarioName, type FROM ab_scenario a LEFT JOIN ab_user_withdrawal b ON a.userSeq = b.userSeq WHERE b.userId = 'rye0220'; 일단, 탈퇴한 rye0220유저가 사용했던 시나리오명과 타입을 구해야 하므로, 보여주고 싶은 정보를 SELECT에 기재하고, 일단 이 보여주고 싶은 정보가 있는 테이블을 FROM 뒤..
오늘의 문제 두둥. 일단, 평균 발송건수를 추출해야하니 합계에 대한 접근은 아닐 것이고! (count는 사용 x) 그렇다면 평균값을 구하는 조건식을 사용하면 될 것 같다. 여기서 사용되는 조건식은 avg, group by 정도가 아닐까 생각하고 접근해보자. 나의 오답 (언제쯤 제대로 된 쿼리를 짤 수 있을 것인가) 일단 "월별 평균 발송건수"에 집중해보면, 월 발송일자와 발송건수에 대한 평균을 보여주겠다고 정의하고그 다음 어느 테이블에서 DB를 추출할지 결정한다. 그 다음 WHERE 절을 통해 조건식을 설정하는데, 2022년이라는 설정이 있으니 YEAR(sentDate) = 2022가 성립이 되는 것. 마지막으로 "월별" 이니, month 기준으로 GROUPBY를 실행한다! 이렇게 해석해 보면, 엄청 어..