본문 바로가기
개발일지/임시카테고리

SQL 기초 22 HAVING (GROUP BY와 셋트메뉴라고 보면 된다)

by 다니엘의 개발 이야기 2022. 8. 25.
320x100

HAVING

 

#문제1

 

conditions

we are launching a platinum service for

our most loyal customers. We will assign

platinum status to customers that have

had 40 or more transaction payments.

 

question

what customer ids are eligible for

platinum status?

 

answer

 

SELECT customer_id, COUNT(*)

FROM payment

GROUP BY customer_id

HAVING COUNT(*) >= 40

 

….. 지금 쿼리실행하고 3분째 기다리고 있는데도 답이 안나온다

진심으로 이걸 어떻게 쓰는거지?

이건 단단히 뭔가에 문제가 있다고 보는게 맞는것 같다.


#문제2

 

What are the customer ids of customers

who have spent more then $100 in payment

transactions with our staff_id member 2?

 

# 내 답안

 

SELECT customer_id, SUM(amont) AS Total_amount

FROM payment

GROUP BY customer_id

HAVING SUM(amount) > 100 AND

staff_id = 2

 

하지만 여기서 문제가 있었다.

연산문젠지 뭔지 모르겠으나, 아무튼 내가 사용에 있어서 잊고 있던게 있었다.

GROUP BY로 하더라도 WHERE 절은 사용이 가능하다.

단, SELECT에서 연산함수였나? (agg)라고 해서 sum, max 등으로 쓰인것 말이다.

 

아무튼 본 문제에서는 SELECT에 쓰이지 않은 조건으로써

staff_id가 2인 것을 하나의 조건으로 하고 있기 때문에 코드가 달리될 수 있다.

 

# 답안 코드

 

SELECT customer_id, SUM(amont) AS Total_amount

FROM payment

WHERE staff_id = 2

GROUP BY customer_id

HAVING SUM(amount) > 100


-잡설-

 

아.... 진짜 이걸 어떻게 받아들여야하나..

 

SELECT customer_id, SUM(amont) AS Total_amount

FROM payment

GROUP BY customer_id

HAVING SUM(amount) > 100 AND

staff_id = 2

라고 입력했을때 에러가 떴다.

2분정도 로딩하다가;

 

아니 에러날거면 에러 표시 바로 해주면 되잖아

뭐이렇게 로딩이 오래걸려;

postgreSQL을 전세계적으로 많이 쓰고 RDBMS?

관계형 SQL 중에서 4번째 점유율을 자랑하고 있던데

이따위 쿼리 스피드로 절대 절대 절대로 4번째 점유율 차지할 수가없다.

분명 뭔가 방법이 있는거다.

그걸 차근차근 찾아내보자.

 

일단 구글링은 선택지에서 배제되었고

stack over flow의 답변을 기다리고

또 보니깐 mysql할때는 대소문자 안가렸었는데

postgreSQL은 대소문자 가리는 느낌이다;

소문자쓰면 보통 로딩이 3분정도인것같다. (체감 아니고 진짜 로딩시간이 찍힌게 3분정도)

그리고 책으로 학습을 해보자

300x250