728x90
반응형

 

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQL 복습 5일차 입니다. 오늘도 HackerRank에서 문제를 풀어보았는데요 

 

함께 살펴보도록 하시죠! 

 

 

 

7. harry-potter-and-wands

  • 문제의 해석 : 해리포터와 친구들은 찰리의 오래되고 부셔진 지팡이를 교체하기 위해 론과 올리벤더 지팡이 가게를 방문했다. 헤르미온느는 지팡이를 고르는 최선의 방법으로서 non-evil 지팡이이면서 높은 Power와 Age 특성을 갖는 지팡이를 사기 위해 필요한 최소한의 돈(gold galleons)을 고르는 방법을 제안했다. 이 방법을 적용했을 때, 론이 관심있어 할 만한 지팡이의 id, age, coins_needed, power 값들을 출력해라. 이 때 1차적으로 정렬 기준은 power 기준으로 내림차순 정렬하며, 동일한 power 값이 있을 때는 age 값을 기준으로 내림차순 정렬해라.
  • 선정한 이유 : join에 대한 훈련을 할 수 있기때문입니다.
  • 접근방식 :
  1. is_evil=0 값인 non-evil 지팡이들만 골라야 합니다.
  2. Age, Power 값이 각각 같은 지팡이들 중에서 coins_needed 값을 최소로 하는 지팡이를 골라야 합니다.
  3. 2개의 정렬 기준을 만족시켜야 합니다.
SELECT W.id, P.age, W.coins_needed, W.power 
FROM Wands W 
INNER JOIN Wands_Property P 
ON W.code = P.code WHERE P.is_evil = 0 AND W.coins_needed = (SELECT MIN(W1.coins_needed) 
FROM Wands W1 INNER JOIN Wands_Property P1 
ON W1.code = P1.code WHERE P1.is_evil = 0 AND W1.power = W.power AND P1.age = P.age) 
ORDER BY W.power DESC, P.age DESC

 

8. Challenges 

  • 문제의 해석 : 서브쿼리를 이용한 문제
  • 선정한 이유 : 너무 어렵다..
  • 접근방식 : 너무 어려워서 내일 다시 풀어볼 예정
  • 코드
SELECT Hackers.hacker_id, Hackers.name, COUNT(*) AS challenges_created 
FROM Hackers 
INNER JOIN Challenges 
ON Hackers.hacker_id = Challenges.hacker_id 
GROUP BY Hackers.hacker_id, Hackers.name 
HAVING challenges_created IN 
(SELECT sub2.challenges_created FROM (SELECT hacker_id, COUNT(*) AS challenges_created FROM Challenges 
GROUP BY Challenges.hacker_id) 
sub2 GROUP BY sub2.challenges_created HAVING COUNT(*) = 1) 
OR challenges_created = (SELECT MAX(sub1.challenges_created) 
FROM (SELECT COUNT(*) AS challenges_created FROM Challenges GROUP BY Challenges.hacker_id) sub1) ORDER BY challenges_created DESC, Hackers.hacker_id

 

오늘 풀었던 문제는 다시 풀었는데 너무 어려워서 저녁에 다시 복습을 해보아야할 것 같습니다. 

 

오늘도 글을 읽어주셔서 감사합니다. 



출처: https://daje0601.tistory.com/297 [코딩일기]

728x90
반응형
728x90
반응형

 

 

 

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQL 복습 4일차 입니다. 오늘도 HackerRank에서 문제를 풀어보았는데요 

 

함께 살펴보도록 하시죠! 

 

 

 

7. harry-potter-and-wands

  • 문제의 해석 : 해리포터와 친구들은 찰리의 오래되고 부셔진 지팡이를 교체하기 위해 론과 올리벤더 지팡이 가게를 방문했다. 헤르미온느는 지팡이를 고르는 최선의 방법으로서 non-evil 지팡이이면서 높은 Power와 Age 특성을 갖는 지팡이를 사기 위해 필요한 최소한의 돈(gold galleons)을 고르는 방법을 제안했다. 이 방법을 적용했을 때, 론이 관심있어 할 만한 지팡이의 id, age, coins_needed, power 값들을 출력해라. 이 때 1차적으로 정렬 기준은 power 기준으로 내림차순 정렬하며, 동일한 power 값이 있을 때는 age 값을 기준으로 내림차순 정렬해라.
  • 선정한 이유 : join에 대한 훈련을 할 수 있기때문입니다.
  • 접근방식 :
  1. is_evil=0 값인 non-evil 지팡이들만 골라야 합니다.
  2. Age, Power 값이 각각 같은 지팡이들 중에서 coins_needed 값을 최소로 하는 지팡이를 골라야 합니다.
  3. 2개의 정렬 기준을 만족시켜야 합니다.
SELECT W.id, P.age, W.coins_needed, W.power 
FROM Wands W 
INNER JOIN Wands_Property P 
ON W.code = P.code WHERE P.is_evil = 0 AND W.coins_needed = (SELECT MIN(W1.coins_needed) 
FROM Wands W1 INNER JOIN Wands_Property P1 
ON W1.code = P1.code WHERE P1.is_evil = 0 AND W1.power = W.power AND P1.age = P.age) 
ORDER BY W.power DESC, P.age DESC

 

8. Challenges 

  • 문제의 해석 : 서브쿼리를 이용한 문제
  • 선정한 이유 : 너무 어렵다..
  • 접근방식 : 너무 어려워서 내일 다시 풀어볼 예정
  • 코드
SELECT Hackers.hacker_id, Hackers.name, COUNT(*) AS challenges_created 
FROM Hackers 
INNER JOIN Challenges 
ON Hackers.hacker_id = Challenges.hacker_id 
GROUP BY Hackers.hacker_id, Hackers.name 
HAVING challenges_created IN 
(SELECT sub2.challenges_created FROM (SELECT hacker_id, COUNT(*) AS challenges_created FROM Challenges 
GROUP BY Challenges.hacker_id) 
sub2 GROUP BY sub2.challenges_created HAVING COUNT(*) = 1) 
OR challenges_created = (SELECT MAX(sub1.challenges_created) 
FROM (SELECT COUNT(*) AS challenges_created FROM Challenges GROUP BY Challenges.hacker_id) sub1) ORDER BY challenges_created DESC, Hackers.hacker_id

 

오늘 풀었던 문제는 다시 풀었는데 너무 어려워서 저녁에 다시 복습을 해보아야할 것 같습니다. 

 

오늘도 글을 읽어주셔서 감사합니다. 

728x90
반응형
728x90
반응형

 

 

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQL 복습 3일차 입니다. 오늘도 HackerRank에서 문제를 풀어보았는데요 

 

함께 살펴보도록 하시죠! 

 

 

 

5. Weather Observation Station 20
 - 문제의 해석 : 간단히 중간값을 구하라 문제입니다.   
 - 선정한 이유 : NySQL에서는 아직 median함수가 없습니다. 이제 median 형식을 이용하여 접근을 해야하기에 문제를 선정하였습니다. 
 - 접근방식 : percent_rnak()를 활용하여 풀었습니다. 
 - 링크 : https://www.hackerrank.com/challenges/weather-observation-station-20/problem
 - 코드 

SELECT ROUND(LAT_N,4)
FROM(SELECT LAT_N, PERCENT_RANK() OVER (ORDER BY LAT_N) percent
     FROM STATION) a
WHERE percent = 0.5;



6. Top Competitors
 - 문제의 해석 : 코딩테스트 제출자 중 full score 맞은 문제가 한개보다 많은 (2개 이상) 인 참가자의 hacker_id와, name을 출력하라는문제입니다.
                여기서 full score가 무엇이지? 고민할 수 있는데, 각 문제별도 주어진 점수표가 full score가 됩니다. 
 - 선정한 이유 : join에 대한 훈련을 할 수 있기때문입니다. 
 - 접근방식 : 
  1) submissions table을 base로 필요한 정보를 담고 있는 테이블들을 join합니다.    
  2) 제출한 문제의 full score 를 알기 위해 difficuly 테이블의 score 정보가 필요합니다. 
  3) difficulty level 정보가 있어야 full score 를 연결할 수 있고, 그 정보는 Challenges 테이블에 있습니다. 
  4) hacker의 이름을 출력하기 위해 Hackers 테이블이 필요합니다. 
 - 링크 : https://www.hackerrank.com/challenges/full-score/problem
 - 코드 

select h.hacker_id, h.name
from submissions s
inner join challenges c
on s.challenge_id = c.challenge_id
inner join difficulty d
on c.difficulty_level = d.difficulty_level 
inner join hackers h
on s.hacker_id = h.hacker_id
where s.score = d.score and c.difficulty_level = d.difficulty_level
group by h.hacker_id, h.name
having count(s.hacker_id) > 1
order by count(s.hacker_id) desc, s.hacker_id asc

 

오늘도 두 문제를 함께 풀어보았는데도 오늘은 연습이 조금 필요한 거 같네요.. 생각이 잘 나지 않아서 고생했습니다. ㅠㅠ

 

진짜 풀기 싫었는데 꾹 참고 성실히 풀었습니다. 

 

여러분과도 함께 약속한것이니까요! 

 

오늘도 글을 읽어주셔서 감사합니다. 

728x90
반응형
728x90
반응형

 

 

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQL 복습 2일차 입니다. 오늘도 HackerRank에서 문제를 풀어보았는데요 

 

함께 살펴보도록 하시죠! 

 

 

2021.10.19 - 2day

 


3. Occupations 
 - 문제의 해석 : 이름과 직업으로 구성된 컬럼을 직업 기준으로 재구성하는 문제입니다. 
 - 선정한 이유 : SQL에서 Pivot table을 만들 수 있는지를 체크하기 위해서 선정하였습니다. 
 - 접근방식 : RowNumber를 활용하여 각 그룹별 넘버링을 한 후 넘버링으로 group by 하여 풀었습니다. 

 - 링크 : https://www.hackerrank.com/challenges/occupations/problem  
 - 코드 

  set @r1=0, @r2=0, @r3=0, @r4=0;
  select min(Doctor), min(Professor), min(Singer), min(Actor)
  from(
    select case when Occupation='Doctor' then (@r1:=@r1+1)
              when Occupation='Professor' then (@r2:=@r2+1)
              when Occupation='Singer' then (@r3:=@r3+1)
              when Occupation='Actor' then (@r4:=@r4+1) end as RowNumber,
      case when Occupation='Doctor' then Name end as Doctor,
      case when Occupation='Professor' then Name end as Professor,
      case when Occupation='Singer' then Name end as Singer,
      case when Occupation='Actor' then Name end as Actor
    from OCCUPATIONS
    order by Name
   ) temp
  group by RowNumber;


  
4. Binary Tree Nodes

 - 문제의 해석 : 트리 노드 정보를 담고 있는 테이블에서 각각의 row가 어디에 해당하는지를 가려내는 문제입니다. 
 - 선정한 이유 : 트리에 대한 이해와 SQL조건문을 다룰 수 있는지를 확인 할 수 있는 문제여서 선정하였습니다. 
 - 접근방식 : P에 null이 있다면 그것은 루트노드로 간주 할 수 있고, n에 있는 값이 P 있다면 inner 노드라고 간주할 수 있다는 아이디어로 접근하였습니다. 

 - 링크 : https://www.hackerrank.com/challenges/binary-search-tree-1/problem 

 - 코드 

  select 
  case when P is null then concat(N, ' Root')
     when N in (select distinct P from bst) then concat(N, ' Inner')
     else concat(N, ' Leaf') end
  from bst
  ORDER BY N ASC

 

 

링크도 함께 공유하였으니 여러분도 꼭 함께 풀어 보시고 제가 푼 방법보다 좋은 방법이 있다면 댓글로 공유 부탁드립니다. 

 

감사합니다. 



728x90
반응형
728x90
반응형

 

 

 

 

 

안녕하십니까 다제입니다. 

 

최근 갑작스럽게 SQL 코딩테스트를 보는 일이 생겼는데요 

 

이를 위해 5일간 집중적으로 SQL 코딩테스트를 연습하게 되었습니다. 

 

연습한 문제에 비해 너무 긴장하여 좋은 결과를 얻진 못하였지만 복습할 겸 잊어버리지 않기 위해 하루에 2문제씩 문제를 풀고자 합니다. 

 

총 150문제와 개념 공부를 집중적으로 하였는데 모든 문제를 다룰 수는 없고 여러분도 꼭 알았으면 하는 문제들만 선별하여 같이 다루어보았으면 좋겠습니다. 

 

2021.10.18 - 1day

 


1. Higher Than 75 Marks
 - 문제의 해석 : substring, right, left, order by, where의 개념을 확인하기 위해 해당 데이터에서 이름을 출력하는 문제  
 - 선정한 이유 : 문제를 꼼꼼히 읽지 않으면 쉽게 틀릴 수 있고, 코테를 보는 경우 더욱 당황할 수 있는 있기에 선정하였습니다. 
 - 접근방식 : 처음 대충 읽고 풀었는데, 틀려서 마음을 차분히 하고 다시 천천히 읽고 풀었습니다. 

 - 링크 : https://www.hackerrank.com/challenges/more-than-75-marks/problem?isFullScreen=true
 - 코드 

select name from students 
where marks > 75 order by right(name, 3), id asc


  
2. Type of Triangle
 - 문제의 해석 : 삼각형의 각 변의 데이터가 1 컬럼씩 들어 있고 정삼각형인지, 이등변삼각형인지 삼격형의 종류를 구분하는 문제 
 - 선정한 이유 : case문 내에 case를 다시 사용할 수 있다는 점을 알리고 싶었고 새롭게 배운 내용이였기 때문입니다. 
 - 접근방식 : 먼저 삼각형이 성립하는지 여부를 판별하고 판별을 하였을 경우, 삼각형을 나누는 기준이 각 변의 길이가 같은지를 체크하는 식으로 코드를 구현해보았습니다. 

 - 링크 : https://www.hackerrank.com/challenges/what-type-of-triangle/problem?isFullScreen=true

 - 코드 

  select 
  case when a+b>c and b+c>a and a+c>b then
          case when a=b and b=c then "Equilateral"
               when a=b or b=c or a=c then "Isosceles" else "Scalene" end
       else "Not A Triangle" end
  from triangles

 

링크도 함께 공유하였으니 여러분도 꼭 함께 풀어 보시고 제가 푼 방법보다 좋은 방법이 있다면 댓글로 공유 부탁드립니다. 

 

감사합니다. 

 

728x90
반응형
728x90
반응형

 

 

 

 

안녕하세요 다제입니다. 

 

오늘은 SQL에서 all에 대한 이해가 부족한 분들을 위해 간단한 예를 가져왔습니다. 

 

이 간단한 예를 보시면서 이해가 되셨으면 좋겠습니다. 

 

 

1. all을 사용하지 않은 코드

select * from employees 
where department in (select department from departments where division = 'Kids')
and hire_date > (select max(hire_date) from employees where department = 'Maintenance')
order by department, gender desc

 

2. all을 사용한 코드

select * from employees 
where department in (select department from departments where division = 'Kids')
and hire_date > all (select hire_date from employees where department = 'Maintenance')
order by department, gender desc

 

위 두 코드의 결과는 같은 결과 값이 출력됩니다. 

 

조금이나마 도움이 되었으면 하는 바램으로 간단하게 포스팅하였습니다. 

 

추가적인 질문이 있으시면 댓글 부탁드립니다. 

 

감사합니다. 

728x90
반응형
728x90
반응형

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQLD 마지막 학습단원인 SQL 최적화 원리에 대해 학습한 내용을 마인드맵으로 정리하였습니다. 

 

부트캠프에서는 다루지 않았던 내용이라서 학습하는데 매우 고생하였던 기억이 납니다. 

 

반드시 구글 검색도 함께 하시어 부족한 개념을 채워가시면 좋을 것 같습니다. 

 

 

 

 

오늘도 방문해주셔서 감사드립니다. 

 

궁금하신 사항은 언제나 댓글 부탁드립니다. ^^

 

 

감사합니다. 

 

 

 

 

728x90
반응형
728x90
반응형

 

안녕하십니까 다제입니다. 

 

SQL 기본에 이어 활용 부분에 대해 학습한 내용을 마인드맵으로 정리하였습니다. 

 

혹시 SQLD 공부하시는 분들 참고하시라고 정리본을 공유드립니다.

 

 

추가적인 질문사항이 있다면 댓글 부탁드립니다. 

 

오늘도 방문해주셔서 감사드립니다. 

 

 

 

 

728x90
반응형
728x90
반응형

 

 

안녕하십니까 다제입니다. 

 

오늘은 SQL 기본편에 대해서 살펴보았습니다. 

 

간단한 내용이지만, 문제에 응용하여 출제되는데 상당히 까다로운 부분입니다. 

 

개념의 내용은 적지만, 제가 추천드린 책을 통해서 반드시 문제를 꼼꼼하게 풀어보시는걸 추천드립니다. 

 

저도 처음에는 배운 내용이고 쉽네~ 라고 생각했다가 매우 고생했습니다.

 

SQLServer와 Oracle의 차이 등 매우 까다로운 문제들이 많이 있으니, 꼭 SQLD 문제집을 풀어보아야 하는 chapter입니다. 

 

 

<SQL 기본 이해하기 마인드맵>

 

 

저 같은 경우, 모르는 문제는 인터넷에서 검색을 통해서 해결하였으며, 카페 등의 커뮤니티가 활성화 되어 있으니 같이 참고하셔도 좋을 것 같습니다. 

 

추천드리는 사이트 : https://cafe.naver.com/sqlpd

 

그 외 추가적인 질문이 있으시다면 언제든 댓글 부탁드립니다. 

 

오늘도 방문해주셔서 감사드립니다!

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형

 

안녕하십니까 다제입니다.

 

오늘부터는 지난 시간에 이어 SQL에 대해서 조금씩 복습을 진행해볼까 합니다. 

 

공부하고 정리한 내용에 대해서 아래 도표로 만들어서 포스팅하오니 함께 복습해보면 좋을 것 같습니다. 

 

 

오늘도 빡공하하세요!

도움이 되셨다면 공감 부탁드립니다!

 

 

* 참고하면 좋은 링크 *

 -. 성능 데이터 모델링 : https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=331

728x90
반응형

+ Recent posts