SELECT * FROM card
WHERE 사용금액 > (SELECT avg(사용금액) FROM card)
단, IN() 안에서는 여러개의 행의 데이터들을 서브쿼리로 대체가능하다.
보통 JOIN으로 많이 사용한다.
SELECT *FROM card WHERE 고객명 IN (SELECT 이름 FROM blacklist)
카테고리 컬럼이란 데이터 몇개를 몇가지 종류로 구분가능한 컬럼
having : group by의 where문
group by 결과만 필터링 가능.
where문은 전체 행을 필터링 할때 사용.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
SELECT 고객등급, max(사용금액) FROM card WHERE 연체횟수 = 0
GROUP BY 고객등급 HAVING 고객등급 = 'vip' OR 고객등급 = '패밀리'
SELECT 고객등급, COUNT(고객명) FROM card
WHERE 연체횟수 = 0
GROUP BY 고객등급
HAVING 고객등급 = 'vip'
위 코드는 뭐하라는 소리일까요?
SELECT FROM으로 모든 데이터 출력하는데
연체횟수 = 0인 행만 필터링하고
그 결과를 고객등급으로 그룹화하고
그 결과에서 고객등급 = 'vip'인 행만 필터링하라는 소리입니다.
<나의 해석>
고객등급이 같은 사람끼리 무리짓고 고객등급이 vip인 사람만을 고객명을 통해 갯수를 세서 나타내라.
그런데 연체회수가 0회여야함.