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분정도)
그리고 책으로 학습을 해보자
'개발일지 > 임시카테고리' 카테고리의 다른 글
matplotlib 기초 그래프 구현의 원리 (0) | 2022.08.26 |
---|---|
python matplotlib ValueError: x and y must be the same size (0) | 2022.08.26 |
SQL 기초 21 GROUP BY (ft.postgreSQL 개느리네 진짜..) (0) | 2022.08.25 |
SQL 기초20 집합연산자 UNION, UNION ALL, INTERSECT, EXISTS, ANY (0) | 2022.08.25 |
SQL 기초 19 뷰(view) (0) | 2022.08.25 |