CodeSignal Intro Databases #8 ContestLeaderboard. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, 데이터베이스, sql, query, 쿼리
CodeSignal Intro Databases #8
Q.
You are working as a recruiter at a big IT company, and you're actively looking for candidates who take the top places in major programming contests. Since the grand finale of the annual City Competition, you've been reaching out to the top participants from the leaderboard, and successfully so.
You have already interviewed all the prize winners (the top 3 participants), but that's not enough right now. Your company needs more specialists, so now you would like to connect with the participants who took the next 5 places.
The contest leaderboard is stored in a table leaderboard with the following columns:
- id: unique id of the participant;
- name: the name of the participant;
- score: the score the participant achieved in the competition.
큰 IT 기업의 채용자로 일하고 있는데, 주요 프로그래밍 대회에서 상위권을 차지한 후보자들을 찾고 있다. 매해 하는 시 대회에서의 결승 이후로, 리더보드의 상위 참가자들에게 닿을 수 있었다. 이미 탑3는 인터뷰를 했고, 그걸로는 충분하지 않다. 더 많은 스페셜리스트가 필요해서, 그 다음 상위 5명을 더 연결해보려한다.
컨테스트 리더보드는 leaderboard 테이블에 다음과 같은 컬럼들로 저장되어 있다.
- id: 유일한, 참가자들의 id
- name: 참가자들의 이름
- score: 참가자가 대회에서 획득한 점수
The resulting table should contain the names of the participants who took the 4th to 8th places inclusive, sorted in descending order of their places. If there are fewer than 8 participants, the results should contain those who ranked lower than 3rd place.
It is guaranteed that there are at least 3 prize winners in the leaderboard and that all participants have different scores.
결과테이블은 4~ 8등 참가자들의 이름을 포함해야하고, 순위에 따라서 내림차순 정렬한다. 8명보다 적은 참가자가 있다면, 3위 이하 참가자들을 포함한다.
최소 3위까지의 인원이 있고, 모든 참가자들은 다른 점수를 갖고있다.
Example
For the following table leaderboard
id
name
score
1 | gongy | 3001 |
2 | urandom | 2401 |
3 | eduardische | 2477 |
4 | Gassa | 2999 |
5 | bcc32 | 2658 |
6 | Alex_2oo8 | 6000 |
7 | mirosuaf | 2479 |
8 | Sparik | 2399 |
9 | thomas_holmes | 2478 |
10 | cthaeghya | 2400 |
the output should be
name
bcc32 |
mirosuaf |
thomas_holmes |
eduardische |
urandom |
- [execution time limit] 10 seconds (mysql)
Process
// Process
//1. Select name
//2. In inner SELECT using ROW_NUMBER() function order by score descending as rownumber
//3. and name in leaderboard table
//4. names selected in 1. will be shown as name
//5. The condition is rownumber > 3, rownumber < 8
// 처리과정
//1. name 을 찾는데,
//2. ROW_NUMBER() 함수를 써서 score 을 내림차순 정렬한 것으로 rownumber 컬럼,
//3. 그리고 name 컬럼을 찾는다. leaderboard 테이블에서.
//4. 1번에서 찾는 name 컬럼은 name 이라는 이름으로 결과를 보여준다
//5. 조건으로는 rownumber 가 3보다 크고, 9보다 작은 것
Code.. lemme see example code!!!
코드.. 예제코드를 보자!!!
/*Please add ; after each select statement*/
CREATE PROCEDURE contestLeaderboard()
BEGIN
SELECT name FROM
(SELECT ROW_NUMBER() OVER (ORDER BY score DESC) AS rownumber, name
FROM leaderboard) AS name
WHERE rownumber > 3 AND rownumber < 9;
END
Something else you might like...?
2019/10/09 - [Computer/General] - 정보처리기사 실기/필기 - IT신기술동향_전산영어 요점 정리
2019/10/07 - [Computer/General] - 정보처리기사 실기/필기 - 업무 프로세스 요점 정리
2019/02/19 - [Life/Health care] - Lysine 라이신 usage/side effects/dosage 효과/효능/부작용/성인,소아 용법, 복용법
2019/02/28 - [Life/Health care] - Vitamin K, 비타민 K usage/side effects/dosage 효능/부작용/성인,소아 용법