반응형

전체 글 88

1484. Group Sold Products By The Date

Activities 테이블에서 sell_date를 기준으로 GROUP BY를 한 후 그룹핑된 product를 기준으로 count를 구하고, 최종적으로 해당 그룹에 제품들을 콤마 로 구분하여 하나로 합쳐 결과를 반환하는 SQL을 작성하는 문제이다. 처음엔 이전 문제를 풀면서 CONCAT(문자열 합쳐주는 함수) 를 알게 되었고 이를 사용하여 문제를 해결하려고 시도 하였다. 풀이가 도저히 생각나지 않아 솔루션을 확인한 결과 GROUP_CONCAT 이라는 것을 새롭게 알게 되었다. GROUP_CONCAT사용법은 다음과 같다. select type, group_concat(name) from test group by type ; type name fruit 수박,사과,바나나,사과 group_concat을 기본적인..

1667. Fix Names in a Table

Users 테이블에 name 필드에서 name의 첫번째 문자는 대문자, 이후 문자는 소문자로 변환하여 반환하는 SQL을 작성하는 문제이다. (핵심은 SQL의 문자열 함수를 사용해 적절히 변환 하는것이다.) Mysql의 문자열 함수는 다음과 같은 것이 존재한다. 함수 사용법 반환 값 ASCII() ASCII(t) t의 아스키 코드값 리턴 CONCAT() CONCAT(t1,t2,.....) t1t2 형식의 문자열 CONCAT_WS() CONCAT_WS(S,t1,t2,....) t1St2S.. 형식의 문자열 LENGTH() LENGTH(t) 문자열 t의 길이 CHAR_LENGTH() CHAR_LENGTH(t) 문자열 t의 길이 single-byte, multi-byte 미구별 CHARACTER_LENGTH()..

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..

627. Swap Salary

이번 문제는 단순 조회하는 select 쿼리 문제가 아니라 update 쿼리문제이다. spring JPA를 쓰다보니 Hibernate에서 SQL를 자동으로 생성해주어 개발자가 직겁 select,update,delete쿼리를 날리는 경우가 거의 없다. 하지만 현업에는 다양한 도메인이 있으며 이를 위해서는 직접 SQL을 작성해보는 훈련이 필요하다. #my solution update Salary set sex = if(sex='m','f',if(sex='f','m',sex)) #other solution UPDATE salary SET sex = CASE sex WHEN 'm' THEN 'f' ELSE 'm' END;

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

OOME(Out Of Memory Error) 발생 및 해결

프로젝트를 배포하고 실제 테스트 도중에 갑자기 서버가 멈추는 서비스 장애가 발생하였다. 로깅을 처리해 놓지 않아 에러를 발견하는데 어려움이 있었고 서버를 foreground로 실행하여 어떤 에러가 발생하는지 확인해 보았다. 에러는 다음과 같았다.( OutOfMemoryError: Java heap space 띠용...????) 순간 뇌정지가 왔지만 마침 학교에서 운영체제를 배우고 있어 수업때 배운 여러가지 내용이 머릿속을 스쳐지나갔다. (메모리 초과??, Heap??, 동적할당??, Page fault??, JVM?? 등등....) 처음에는 단순히 힙 사이즈가 작아서 그런가?그럼 JVM의 Max_Heap_Size를 늘려주면 되겠네 라고 생각했었다. 이전에 java는 jvm 위에서 컴파일 되고 실행된다는 ..

Dev 2022.11.30

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..

반응형