반응형

MySQL 3

196. Delete Duplicate Emails

Person 테이블에 중복된 이메일을 삭제하여 결과를 반환하도록 SQL을 작성하는 문제이다. ※단, SELECT를 사용하지 않고 결과를 반환해야한다. 문제를 처음 보는 순간 select를 사용하여 이메일 기준으로 group by 한다음 해당 그룹에 이메일 갯수가 1개 이상이면 중복된 이메일이 있다는 것을 알 수 있다. (이 답도 제출이 되네...) delete from Person where id not in ( select min(p.Id) from (select * from Person) p group by p.email ); 이를 해결하기 위해 Person을 Join 하거나 Cartesian Product를 통해 조건을 설정해주면 된다. delete p1 from Person p1, Person p..

1873. Calculate Special Bonus

Employees 테이블에서 employee_id 가 짝수이거나 name이 M으로 시작하는 직원은 0의 bonus를 받고 그 외 직원은 salary의 100%를 보너스를 받도록 SQL을 작성하는 문제이다. (단 employee_id를 기준으로 정렬해야한다) 이 문제의 핵심은 IF 와 MOD(%)연산을 적절히 사용하는 것이다. 기존에 SELECT에서 단일 애트리뷰트만 조건없이 조회하였지만 SQL에 다양한 기능이 있는것을 알게 되었다. select employee_id, if(employee_id % 2 = 0 or name like 'M%' ,0, salary) as bonus from Employees order by employee_id asc

584. Find Customer Referee

Customer 테이블에서 referee_id가 2가 아닌 사람의 name을 반환하는 SQL을 작성하는 문제이다. 테이블 스키마를 확인해보면 referee_id가 int 인것을 확인 할 수 있다. (엇.. 빈칸이 있네.. NULL인가??) null을 다뤄보지 않아 referee_id = null 이렇게 처리하면 동작할줄 알았다... (null은 =연산이 안되는지 몰랐음...) 해결 방법은 referee_id is null 또는 isnull(referee_id)를 사용하면 된다. # my solution select name from Customer where referee_id != 2 or referee_id is null # other solution SELECT name FROM customer W..

반응형