1667. Fix Names in a Table

네임 들을 캐피털 화 시키는 작업이다. Sql의 서브 스트링을 알고 있다면 손쉽게 풀 수 있는 문제이다.

# Write your MySQL query statement below

select user_id,concat(upper(left(name,1)),lower(substring(name,2))) as name
from users
order by user_id;

concat을 이용해 문자열을 붙이고 , left()와 subString을 이용해 문자를 각각 나누어 주었다.

left(name,1)을 이용해 왼쪽 에서부터 1개,

substring (스트링,시작,끝) 인데 끝이 없다면 끝까지 들고 온다. 이후 각각 upper와 lower를 이용해서 이어 붙이면 끝

 

1484. Group Sold Products By The Date

이번 문제는 은근 애를 먹었다, 그룹 바이를 이용해 데이터 별로 나누어 주었지만 products 에 어떻게 나열해야 할지 생각 이 잘 나질 않아서 구글링 끝에 작성했다.

# Write your MySQL query statement below
select a.sell_date,
count(distinct a.product) as num_sold, 
group_concat(distinct product order by product asc) as products
from activities a
group by sell_date
order by sell_date

select 안의 date 부분은 뭐 문제에서 요구 되어지는 부분이고 특별할 것이 없어 넘어간다.

count(distinct a.product) 이부분은 count를 이용해서 하자니 중간에 겹치는 문자가 있다면 그걸 전부 카운트해버리는 것이 아닌가...

중복을 제거해주는 distinct 를 한번 넣어 봤는데 오류 없이 작동하더라, 저렇게 안쪽에도 선언 이 되는지는 이번에 처음 알게 되었다.

group_concat 나를 제일 애먹인 부분이다.

그룹별로 데이터를 나열할 때 사용되어지는 이 함수이다, 사용법은 간다 하게 나열하고 싶은 데이터를 함수 안에 인자로 패스해주면 된다.
문제에서 요구되어지는 순서와 중복이 없어야 하기 때문에 나는 위와 같이 추가적인 제한사항을 적어 주었다.

 

1527. Patients With a Condition

간만에 자신감 있게 풀고 틀리고 한 번 더 제출해서 통과했다. ㅋㅋ 특별할 것 없이 DIAB1 이 포함된 문자열을 찾아서 퍼올려주는 문제이다.

지난번에 배운 like를 이용해 작성했다.

# Write your MySQL query statement below
select patient_id,patient_name,conditions
from patients
where conditions like'DIAB1%' or conditions like '% DIAB1%';

처음 작성할때 like '% DIAB1%' 이런 식으로 작성하니 테스트 12번에서 걸린다 ㅋㅋㅋ 
{"headers": ["patient_id", "patient_name", "conditions"], "values": [[1, "Daniel", "SADIAB100"]]}
위의 like 로 때려버리면 이 인풋은 1개의 값을 반환하게 된다. DIAB1의 prefix 인 경우를 찾아야 하는데 내가 찾은 건 단순 한 번이라도 사용되었다면 반환하기 때문에 이렇게 에러가 발생한다.

or를 이용해서 startsWIth 느낌 나게 한 개,  공백을 이용해서 시작하는 단어로 구분을 지어 주었다.

 

알고리즘 과 는 달리 SQL 문제들은 discuss의 글들이 대부분 비슷하다... db 가 다르지 않은 이상 거의 유사하기 때문에 discuss 보는 재미가 많이 반감되었다..

+ Recent posts