[LeetCode/MySQL]586. Customer Placing the Largest Number of Orders
·
코딩테스트/LeetCode
문제Customer Placing the Largest Number of OrdersOrders 테이블의 customer_number중에서 가장 많이 나온 숫자(가장 많이 주문)를 출력하는 문제였다.문제 풀이SELECT customer_numberFROM OrdersGROUP BY customer_numberORDER BY COUNT(customer_number) DESCLIMIT 1;GROUP BY는 데이터를 그룹화하여 집계함수를 사용하도록 돕고, ORDER BY는 집계된 값을 기준으로 정렬한다. WHERE 절은 그룹화되기 전의 데이터를 필터링하는 데 사용되고, HAVING 절은 그룹화된 데이터에 조건을 걸기 위해 사용된다.
[LeetCode/MySQL]584. Find Customer Referee
·
코딩테스트/LeetCode
문제Find Customer Referee문제 풀이1. 기본 WHERESELECT nameFROM CustomerWHERE referee_id!=2 OR referee_id IS NULL;2. LEFT JOINSELECT c1.nameFROM Customer c1LEFT JOIN Customer c2ON c1.referee_id=c2.id AND c2.id=2WHERE c2.id IS NULL;3. 서브쿼리SELECT nameFROM CustomerWHERE id NOT IN ( SELECT id FROM Customer WHERE referee_id = 2);
[LeetCode/MySQL]607. Sales Person
·
코딩테스트/LeetCode
문제Sales PersonRED라는 회사와 거래하지 않은 Sales Person의 이름을 출력하는 문제였다.문제 풀이SELECT name FROM SalesPersonWHERE sales_id NOT IN( SELECT sales_id FROM Orders JOIN Company ON Orders.com_id=Company.com_id WHERE Company.name="RED");이 문제의 핵심은 Orders와 Customer 테이블을 조인하여 RED 회사와 거래한 sales_id를 찾고 해당 sales_id에 해당하지 않는 SalesPerson의 이름을 출력하는 것이다.서브쿼리에서는 Orders 테이블과 Customer 테이블을 cust_id를 기준으로 조인한 뒤 comp..
[LeetCode/MySQL]577. Employee Bonus
·
코딩테스트/LeetCode
문제Employee Bonus직원 이름과 보너스 금액을 보너스가 없거나 1000보다 작은 경우에만 출력하는 문제였다.문제 풀이SELECT e.name, b.bonusFROM Employee eLEFT JOIN Bonus bON e.empId=b.empIdWHERE bonusLEFT JOIN을 사용하여 Employee 테이블에 있는 모든 직원을 포함시키고 해당 직원과 일치하는 Bonus 테이블의 데이터를 연결했다. 만약 보너스가 없다면 bonus는 NULL로 반환된다.LEFT JOIN은 Employee 테이블에 있는 모든 행을 포함하려고 하지만 WHERE 절에서 조건을 적용하면 bonus가 NULL인 경우는 제외되므로 bonus가 NULL인 경우도 조건에 포함시켜줘야 한다.
[LeetCode/MySQL]511. Game Play Analysis I
·
코딩테스트/LeetCode
문제Game Play Analysis I각 플레이어의 첫 로그인 날짜를 구하는 문제였다.문제 풀이MIN 사용한 풀이SELECT player_id, MIN(event_date) AS first_loginFROM ActivityGROUP BY player_id;JOIN 사용한 풀이SELECT a1.player_id, a1.event_date AS first_loginFROM Activity a1LEFT JOIN Activity a2ON a1.player_id=a2.player_id AND a1.event_date>a2.event_dateWHERE a2.player_id IS NULL;/* ON 조건에 해당하지 않은 a2는 모두 NULL이기 때문에 꼭 player_id가 아닌 a2의 컬럼 중 하나여도 된다. ..
[LeetCode/MySQL]197. Rising Temperature
·
코딩테스트/LeetCode
문제Rising Temperature기온이 다음 날보다 더 높은 날짜의 id를 출력하는 문제였다.문제 풀이SELECT w1.idFROM Weather w1LEFT JOIN Weather w2ON DATE_SUB(w1.recordDate, INTERVAL 1 DAY) = w2.recordDateWHERE w1.temperature > w2.temperature;Weather 테이블을 자기 자신과 조인한다.w1.recordDate - 1 = w2.recordDate 조건으로 오늘과 어제를 연결한다.오늘의 온도가 어제보다 높은 경우만 WHERE 절로 걸러낸다.w1(오늘)w2(어제)w1>w210NULL비교 불가2510O(25>10)2025X(20>25)3020O(30>20)