본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] Leet code - easy

by kime2 2024. 8. 8.

문제

출처 : Triangle Judgement - LeetCode

 

삼각형의 조건에 맞추어 삼각형이면 Yes 아니면 No

  • 두 변의 길이의 합은 다른변의 길이보다 크다
  • 세변의 길이가 같다

풀이(MYSQL)

1. 오답 : 두 변의 길이의 합은 다른변의 길이보다 같거나 클 경우 삼각형

  • 이유 : 세변이 모두 같지 않는 이상 무조건 두변의 길이의 합이 다른 한변보다 커야한다
  • if문에 여러 조건을 나열할 경우 괄호 여부에 따라 답이 달라진다 > 괄호 필수
select x,y,z,
    if((x+y >=z) & (y+z >= x) & (x+z >= y),'Yes','No') as 'triangle'
from Triangle

 

2. 정답

select x,y,z,
    case when (x+y>z) & (y+z > x) & (x+z > y) then 'Yes'
    when x=y=z then 'Yes'
    else 'No'end as 'triangle'
from Triangle

문제

출처 : Biggest Single Number - LeetCode

한개의 숫자로 구성된 것중 가장 큰것, 없다면 null로 조회

풀이(MYSQL)

 1. 오답 : 숫자가 가장 큰걸 찾아야 하는데, 행 순서에 따라 가장 마지막 숫자를 찾는것으로 이해 또는 조건에 맞는 답이 없을 경우 null값 대체를 못함

from절에 테이블과 @row_num을 크로스조인하면 각 행의 번호를 매길 수 있다

with base as (
    select n.num, @rownum := @rownum+1 as rn
    from MyNumbers n,  (select @rownum := 0) r
) -- 각행에 번호를 매기고
select *
from base
group by num
having count(*) = 1 -- 한개의 숫자를 먼저 찾아
and rn = (select max(rn) from base) -- 그 숫자의 rownumber이 마지막인걸 찾기
base테이블 최종

2. 정답 : 문제 조건에 맞추어 단일 숫자중 가장 큰것을 조회 + 없을 경우 null

조건에 맞는 답이 없을 경우 집계함수를 사용하면 null으로 대체할 수 있다

select max(num) as num
from (
    select num
    from MyNumbers
    group by num
    having count(*) = 1 ) as a

문제

출처 : Swap Salary - LeetCode

update문을 사용하여 f를 m으로 m을 f로 바꿔라

풀이(MYSQL)

update문을 사용하면 행의 내용을 수정할 수 있다

UPDATE 테이블

SET 컬럼1 = 데이터1, 컬럼2 = 데이터2...

WHERE 컬럼 = 데이터 (조건)

 

정답 : 문제의 경우 sex컬럼의 데이터를 한번에 여러개 수정해야 하기 때문에 case when을 사용

UPDATE Salary
SET sex = case when  sex = 'f' then 'm'
    when sex = 'm' then 'f'end