SQL

[leetCode] #1581 (EXISTS)

빛날희- 2023. 8. 3. 23:54

문제 - Customer Who Visited but Did Not Make Any Transactions

https://leetcode.com/problems/customer-who-visited-but-did-not-make-any-transactions/

 

Customer Who Visited but Did Not Make Any Transactions - LeetCode

Can you solve this real interview question? Customer Who Visited but Did Not Make Any Transactions - Table: Visits +-------------+---------+ | Column Name | Type | +-------------+---------+ | visit_id | int | | customer_id | int | +-------------+---------+

leetcode.com

Write a SQL query to find the IDs of the users who visited without making any transactions and the number of times they made these types of visits.

Return the result table sorted in any order.

 

 

작성 답안

select v.customer_id, count(*) as count_no_trans
from visits v left join transactions t
on v.visit_id = t.visit_id
where t.transaction_id is null
group by v.customer_id

 

리뷰

discussion을 보니 join을 사용하지 않고 푸는 방법이 있어 가져와보았다.

SELECT customer_id, COUNT(visit_id) as count_no_trans 
FROM Visits v
WHERE NOT EXISTS (
	SELECT visit_id FROM Transactions t 
	WHERE t.visit_id = v.visit_id
	)
GROUP BY customer_id

# https://leetcode.com/problems/customer-who-visited-but-did-not-make-any-transactions/discuss/2533481/3-Different-solutions-(JOIN-NOT-IN-NOT-EXISTS)

EXISTS([subquery]) 

subquery의 결과가 존재하는지 여부를 확인하기 위해 사용된다.

주요 쿼리의 각 행에 대해 조건을 평가하는데 사용하며, 주요 쿼리 결과는 서브쿼리 조건을 만족하는 행만 포함하게 된다.

 

해당 문제에서는 transaction 테이블에 Visit 테이블의 visit_id가 없는 행을 뽑아야 하기 때문에, NOT EXISTS를 통해 구현할 수 있다.