SQL 코드카타
Advanced SQL50 문제부터 풀기.
SELECT customer_id
FROM customers
WHERE year = '2021'
AND revenue > 0;
WITH a
AS (SELECT customer_id
FROM orders
WHERE product_name = 'A'),
b
AS (SELECT o.customer_id
FROM orders o
INNER JOIN a
ON o.customer_id = a.customer_id
WHERE o.product_name = 'B'),
notc
AS (SELECT customer_id
FROM b
WHERE customer_id NOT IN (SELECT customer_id
FROM orders
WHERE product_name = 'C'))
SELECT DISTINCT c.customer_id,
c.customer_name
FROM customers c
INNER JOIN notc
ON c.customer_id = notc.customer_id;
WITH result
AS (SELECT DISTINCT seller_id
FROM orders
WHERE Year(sale_date) = '2020')
SELECT s.seller_name
FROM seller s
LEFT JOIN result r
ON s.seller_id = r.seller_id
WHERE r.seller_id IS NULL
ORDER BY 1;
SELECT e.left_operand,
e.operator,
e.right_operand,
CASE
WHEN e.operator = '<'
AND v1.value < v2.value THEN 'true'
WHEN e.operator = '='
AND v1.value = v2.value THEN 'true'
WHEN e.operator = '>'
AND v1.value > v2.value THEN 'true'
ELSE 'false'
end AS "value"
FROM expressions e
INNER JOIN variables v1
ON e.left_operand = v1.name
INNER JOIN variables v2
ON e.right_operand = v2.name;
아래는 완성된 정답 쿼리.
WITH exam_result
AS (SELECT exam_id,
Min(score) AS "minscore",
Max(score) AS "maxscore"
FROM exam
GROUP BY 1),
lowest
AS (SELECT DISTINCT student_id
FROM exam_result er
LEFT JOIN exam e
ON er.exam_id = e.exam_id
AND er.minscore = e.score),
highest
AS (SELECT DISTINCT student_id
FROM exam_result er
LEFT JOIN exam e
ON er.exam_id = e.exam_id
AND er.maxscore = e.score),
final_list
AS (SELECT *
FROM lowest
UNION
SELECT *
FROM highest),
student_list
AS (SELECT DISTINCT student_id
FROM exam)
SELECT s.student_id,
s.student_name
FROM student s
LEFT JOIN final_list fl
ON s.student_id = fl.student_id
LEFT JOIN student_list sl
ON s.student_id = sl.student_id
WHERE fl.student_id IS NULL
AND sl.student_id IS NOT NULL;