SQL 문제풀이 복습
문제 링크
group by에 딸린 having 절에도
if나 집계함수를 써서 조건을 부여할 수 있다.
굳이 CTE를 여러 개 만들거나
서브쿼리를 여러 번 쓸 필요가 없는 셈.
SELECT o.customer_id,
c.name
FROM Orders o
JOIN Product p
ON o.product_id = p.product_id
JOIN Customers c
ON o.customer_id = c.customer_id
GROUP BY 1
HAVING Sum(IF(order_date LIKE '2020-06%', quantity * price, 0)) >= 100
AND Sum(IF(order_date LIKE '2020-07%', quantity * price, 0)) >= 100;
문제 링크
정규표현식 문제.
난이도는 Easy라고 되어있지만 사실상 정규표현식을 모르면
Hard보다도 더 어려운, 그냥 아예 푸는 게 불가능할 것 같은 문제다ㅎㅎ
이 문제에 들어간 정규표현식 해설.
- ^ → ^ 이하로 시작해야 한다
- [a-zA-z] → 알파벳 대문자나 소문자로 시작해야 한다
- [a-zA-z0-9_.-] → 그 뒤에 올 수 있는 건 알파벳 대소문자, 숫자, 언더바(_), 닷, 그리고 하이픈(-)이다.
- 애스터리스크* → 앞에 나온 문자들은 0회 이상 나와야 한다.
- @leetcode → 도메인 이름 넣어주고
- [.] → @leetcode 다음에는 .이 "반드시" 나와야 하고
- com$ → com으로 끝나야 한다 (comv, comA, com_ 등등 안됨)
SELECT *
FROM users
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode[.]com$';
문제 링크
where 조건을 잘 설정하면 쉬운 문제.
문제에서 요구한 조건은
이렇게 두 가지다.
따라서 where을 쓸 때
지금까지의 where절이 비교적 간단했어서
이렇게 정규식스러운(?) 문제가 나오면 잠깐 멈칫하게 되기 쉬운 듯.
SELECT patient_id,
patient_name,
conditions
FROM Patients
WHERE conditions LIKE 'DIAB1%'
OR conditions LIKE '% DIAB1%';