[해커랭크] SQL Medium & Hard 문제 풀이

seo0·2024년 7월 3일

SQL

목록 보기
8/8
post-thumbnail

Medium



The PADs

다음 두 가지 결과 세트를 생성합니다.

  • OCCUPATIONS의 모든 이름을 알파벳순으로 정렬한 목록을 쿼리하고 바로 뒤에 각 직업의 첫 글자를 괄호로 묶습니다(예: 괄호로 묶음). 예: AnActorName(A), ADoctorName(D), AProfessorName(P) 및 ASingerName(S).
  • OCCUPATIONS에서 각 직업의 발생 횟수를 쿼리합니다. 발생 항목을 오름차순으로 정렬하고 다음 형식으로 출력합니다.
    -> 총 [occupation_count]개의 [occupation]개가 있습니다.

    여기서 [occupation_count]는 OCCUPATIONS에서 직업의 발생 횟수이고 [occupation]은 소문자 직업 이름입니다. 둘 이상의 직업에 동일한 [occupation_count]가 있는 경우 알파벳순으로 정렬해야 합니다.
    참고: 표에는 각 직업 유형에 대해 최소한 두 개의 항목이 있습니다.
  SELECT CONCAT(NAME, '(', SUBSTRING(OCCUPATION, 1, 1), ')')
    FROM OCCUPATIONS
ORDER BY NAME
       , SUBSTRING(OCCUPATION, 1, 1);

  SELECT CONCAT('There are a total of ', COUNT(OCCUPATION), ' ', LOWER(OCCUPATION), 's.')
    FROM OCCUPATIONS
GROUP BY OCCUPATION
ORDER BY COUNT(OCCUPATION)
       , OCCUPATION;

Occupations

각 이름이 알파벳순으로 정렬되어 해당 직업 아래에 표시되도록 OCCUPATIONS의 직업 열을 회전합니다. 출력 열 헤더는 각각 Doctor, Professor, Singer 및 Actor여야 합니다.
참고: 직업에 해당하는 이름이 더 이상 없으면 NULL을 인쇄합니다.

SELECT MAX(CASE WHEN OCCUPATION = 'Doctor' THEN NAME END)
     , MAX(CASE WHEN OCCUPATION = 'Professor' THEN NAME END)
     , MAX(CASE WHEN OCCUPATION = 'Singer' THEN NAME END)
     , MAX(CASE WHEN OCCUPATION = 'Actor' THEN NAME END)
  FROM (
		   SELECT *
                , ROW_NUMBER() OVER(PARTITION BY OCCUPATION ORDER BY NAME) AS ROW_NUM
		     FROM OCCUPATIONS) SUB
		 GROUP BY ROW_NUM

Binary Tree Nodes

N과 P라는 두 개의 열을 포함하는 테이블 BST가 제공됩니다. 여기서 N은 이진 트리의 노드 값을 나타내고 P는 N의 부모입니다.
노드 값에 따라 정렬된 이진 트리의 노드 유형을 찾는 쿼리를 작성하세요. 각 노드에 대해 다음 중 하나를 출력합니다.

  • Root: 노드가 루트 노드인 경우.
  • Leaf: 노드가 리프 노드인 경우.
  • Inner: 노드가 루트 노드도 리프 노드도 아닌 경우.
  SELECT N
       , CASE WHEN P IS NULL THEN 'Root'
              WHEN N IN (SELECT DISTINCT P FROM BST) THEN 'Inner'
              ELSE 'Leaf'
         END
    FROM BST
ORDER BY N

New Companies

앰버의 대기업은 방금 몇몇 새로운 회사를 인수했습니다. 각 회사는 다음 계층 구조를 따릅니다.
Founder => Lead Manager => Senior Manager => Manager => Employee
아래 테이블 스키마가 주어지면 회사_코드, 창립자 이름, 총 리드 관리자 수, 총 고위 관리자 수, 총 관리자 수 및 총 직원 수를 인쇄하는 쿼리를 작성하세요. company_code를 오름차순으로 출력을 정렬하십시오.
메모:

  • 테이블에 중복된 레코드가 있을 수 있습니다.
  • company_code는 문자열이므로 숫자로 정렬하면 안 됩니다. 예를 들어 company_code가 C_1, C_2 및 C_10인 경우 오름차순 company_code는 C_1, C_10 및 C_2가 됩니다.
   SELECT A.COMPANY_CODE
        , A.FOUNDER
        , COUNT(DISTINCT B.LEAD_MANAGER_CODE)
        , COUNT(DISTINCT C.SENIOR_MANAGER_CODE)
        , COUNT(DISTINCT D.MANAGER_CODE)
        , COUNT(DISTINCT E.EMPLOYEE_CODE)
     FROM COMPANY A
LEFT JOIN LEAD_MANAGER B
       ON A.COMPANY_CODE = B.COMPANY_CODE
LEFT JOIN SENIOR_MANAGER C
       ON A.COMPANY_CODE = C.COMPANY_CODE
      AND B.LEAD_MANAGER_CODE = C.LEAD_MANAGER_CODE
LEFT JOIN MANAGER D
       ON A.COMPANY_CODE = D.COMPANY_CODE
      AND B.LEAD_MANAGER_CODE = D.LEAD_MANAGER_CODE
      AND C.SENIOR_MANAGER_CODE = D.SENIOR_MANAGER_CODE
LEFT JOIN EMPLOYEE E
       ON A.COMPANY_CODE = E.COMPANY_CODE
      AND B.LEAD_MANAGER_CODE = E.LEAD_MANAGER_CODE
      AND C.SENIOR_MANAGER_CODE = E.SENIOR_MANAGER_CODE
      AND D.MANAGER_CODE = E.MANAGER_CODE
 GROUP BY A.COMPANY_CODE
        , A.FOUNDER
 ORDER BY A.COMPANY_CODE

Weather Observation Station 18

P1(a, b)와 P2(c, d)를 2D 평면의 두 점으로 간주합니다.

  • a는 북위도(STATION의 LAT_N)의 최소값과 같습니다.
  • b는 서경의 최소값(STATION의 LONG_W)과 같습니다.
  • c는 북위도(STATION의 LAT_N)의 최대값과 같습니다.
  • d는 서경의 최대값(STATION의 LONG_W)과 같습니다.
    점 P1과 P2 사이의 맨해튼 거리를 쿼리하고 소수점 이하 4자리로 반올림합니다.
SELECT ROUND((MAX(LAT_N) - MIN(LAT_N)) + (MAX(LONG_W) - MIN(LONG_W)), 4)
  FROM STATION

Weather Observation Station 19

P1(a, c)와 P2(b, d)를 2D 평면의 두 점으로 간주합니다. 여기서 (a, b)는 각각 북위도(LAT_N)의 최소값과 최대값이고 (c, d)는 각각 STATION에 있는 서부 경도(LONG_W)의 최소값과 최대값입니다.
점 P1과 P2 사이의 유클리드 거리를 쿼리하고 십진수 4자리를 표시하도록 답의 형식을 지정하세요.

SELECT ROUND(SQRT(POW((MAX(LAT_N) - MIN(LAT_N)), 2) + POW((MAX(LONG_W) - MIN(LONG_W)), 2)), 4)
  FROM STATION

Weather Observation Station 20

중앙값은 데이터 세트의 상위 절반과 하위 절반을 구분하는 숫자로 정의됩니다. STATION에서 북위도 중앙값(LAT_N)을 쿼리하고 답을 소수점 이하 4자리로 반올림하세요.

WITH COUNT_ALL AS (
    SELECT COUNT(0) AS CONT_ALL
      FROM STATION
), ROW_NUM AS (
    SELECT *
         , ROW_NUMBER() OVER(ORDER BY LAT_N) AS RN
      FROM STATION
)
SELECT ROUND(LAT_N, 4)
  FROM COUNT_ALL
     , ROW_NUM
 WHERE RN = ROUND(CONT_ALL / 2)

The Report

학생과 성적 이라는 두 개의 테이블이 주어집니다 . 학생 에는 ID , 이름 및 점수라는 세 개의 열이 있습니다 .
Ketty는 Eve에게 이름, 등급, 마크라는 세 개의 열이 포함된 보고서를 생성하는 작업을 제공합니다. Ketty는 8점 미만의 성적을 받은 학생의 이름을 원하지 않습니다. 보고서는 학년별로 내림차순이어야 합니다. 즉, 높은 성적이 먼저 입력됩니다. 동일한 학년(8-10)을 가진 학생이 두 명 이상인 경우 해당 학생의 이름을 알파벳순으로 정렬합니다. 마지막으로 성적이 8점 이하인 경우에는 "NULL"을 이름으로 사용하고 성적순으로 내림차순으로 나열한다. 동일한 학년(1-7)을 배정받은 학생이 두 명 이상인 경우 해당 학생의 성적을 기준으로 오름차순으로 정렬합니다.
Eve를 돕기 위한 쿼리를 작성하세요.

   SELECT CASE WHEN B.GRADE >= 8 THEN A.NAME ELSE NULL END
        , B.GRADE
        , A.MARKS
     FROM STUDENTS A
LEFT JOIN GRADES B
       ON A.MARKS BETWEEN B.MIN_MARK AND B.MAX_MARK
 ORDER BY B.GRADE DESC
        , A.NAME

Top Competitiors

Julia는 방금 코딩 콘테스트를 마쳤습니다. 순위표를 구성하는 데 여러분의 도움이 필요합니다! 두 개 이상의 챌린지에서 만점을 달성한 해커의 이름과 hacker_id를 인쇄하는 쿼리를 작성하세요. 해커가 만점을 획득한 총 챌린지 수를 기준으로 내림차순으로 출력을 정렬하세요. 두 명 이상의 해커가 동일한 수의 챌린지에서 만점을 받은 경우 hacker_id를 오름차순으로 정렬합니다.

  SELECT A.HACKER_ID
       , D.NAME
    FROM SUBMISSIONS A
    JOIN CHALLENGES B
      ON A.CHALLENGE_ID = B.CHALLENGE_ID
    JOIN DIFFICULTY C
      ON B.DIFFICULTY_LEVEL = C.DIFFICULTY_LEVEL
    JOIN HACKERS D
      ON A.HACKER_ID = D.HACKER_ID
   WHERE A.SCORE = C.SCORE
GROUP BY A.HACKER_ID
       , D.NAME
  HAVING COUNT(A.HACKER_ID) >= 2
ORDER BY COUNT(A.HACKER_ID) DESC
       , A.HACKER_ID

Ollivander's Inventory

Harry Potter와 그의 친구들은 Ron과 함께 Ollivander 's에 있으며 마침내 Charlie의 오래된 부러진 지팡이를 교체했습니다.
헤르미온느는 선택하는 가장 좋은 방법은 강력하고 나이가 많은 비사악한 지팡이를 구입하는 데 필요한 최소 금 갈레온 수를 결정하는 것이라고 결정합니다. 론이 관심 있는 지팡이의 id, age, coin_needed, power를 내림차순으로 정렬하여 출력하는 쿼리를 작성하세요. 두 개 이상의 지팡이가 동일한 힘을 갖고 있는 경우, 나이가 많은 순서대로 결과를 정렬합니다.

  SELECT A.ID
       , B.AGE
       , A.COINS_NEEDED
       , A.POWER
    FROM WANDS A
    JOIN WANDS_PROPERTY B
      ON A.CODE = B.CODE
   WHERE B.IS_EVIL = 0
     AND (A.POWER, B.AGE, A.COINS_NEEDED) IN (
     											SELECT C.POWER
                                                     , D.AGE
                                                     , MIN(C.COINS_NEEDED) 
                                                  FROM WANDS C 
                                                  JOIN WANDS_PROPERTY D 
                                                    ON C.CODE = D.CODE 
                                              GROUP BY C.POWER
                                                     , D.AGE
                                             )
ORDER BY A.POWER DESC
       , B.AGE DESC

Challenges

Julia는 학생들에게 몇 가지 코딩 과제를 만들도록 요청했습니다. 각 학생이 생성한 hacker_id, 이름 및 총 챌린지 수를 인쇄하는 쿼리를 작성하세요. 총 챌린지 수를 기준으로 결과를 내림차순으로 정렬합니다. 두 명 이상의 학생이 동일한 수의 챌린지를 생성한 경우 결과를 hacker_id를 기준으로 정렬합니다. 두 명 이상의 학생이 동일한 수의 챌린지를 생성했으며 개수가 생성된 최대 챌린지 수보다 적은 경우 결과에서 해당 학생을 제외합니다.

   SELECT A.HACKER_ID
        , A.NAME
        , COUNT(B.CHALLENGE_ID)
     FROM HACKERS A
LEFT JOIN CHALLENGES B
       ON A.HACKER_ID = B.HACKER_ID
 GROUP BY A.HACKER_ID, A.NAME
   HAVING COUNT(B.CHALLENGE_ID) = (
                                    SELECT MAX(CNT)
                                      FROM (
                                               SELECT HACKER_ID
                                                    , COUNT(0) AS CNT
                                                 FROM CHALLENGES 
                                             GROUP BY HACKER_ID
                                           ) SUB
                                   )
       OR COUNT(B.CHALLENGE_ID) IN (
                                      SELECT CNT
									    FROM (
                                                  SELECT HACKER_ID
                                                       , COUNT(0) AS CNT
                                                    FROM CHALLENGES 
                                                GROUP BY HACKER_ID
                                              ) SUB
								     GROUP BY CNT
							           HAVING COUNT(CNT) = 1
                                    )
 ORDER BY COUNT(B.CHALLENGE_ID) DESC
        , A.HACKER_ID

Contest Leaderboard

당신은 Julia의 마지막 코딩 콘테스트 도전을 훌륭하게 도와주었고 그녀는 당신도 이번 도전에 참여하길 원했습니다!
해커의 총점은 모든 챌린지의 최대 점수를 합한 것입니다. 점수가 내림차순으로 정렬된 해커의 hacker_id, 이름, 총점을 출력하는 쿼리를 작성하세요. 두 명 이상의 해커가 동일한 총점을 달성한 경우 hacker_id를 오름차순으로 결과를 정렬합니다. 결과에서 총 점수가 0인 모든 해커를 제외합니다.

  SELECT SUB.HACKER_ID
       , SUB.NAME
       , SUM(SUB.SCORE)
    FROM(
		      SELECT A.HACKER_ID
                   , A.NAME
                   , B.CHALLENGE_ID
                   , MAX(SCORE) AS SCORE
		        FROM HACKERS A
		   LEFT JOIN SUBMISSIONS B
		          ON A.HACKER_ID = B.HACKER_ID
		    GROUP BY A.HACKER_ID, A.NAME
                   , B.CHALLENGE_ID
		    ORDER BY A.HACKER_ID
                   , A.NAME
         ) SUB
GROUP BY SUB.HACKER_ID
       , SUB.NAME
  HAVING SUM(SUB.SCORE) != 0
ORDER BY SUM(SUB.SCORE) DESC
       , SUB.HACKER_ID

SQL Project Planning

Task_ID, Start_Date 및 End_Date라는 세 개의 열을 포함하는 Projects 테이블이 제공됩니다. 테이블의 각 행에 대해 End_Date와 Start_Date 간의 차이가 1일과 동일하다는 것이 보장됩니다.
작업의 End_Date가 연속적인 경우 해당 작업은 동일한 프로젝트의 일부입니다. Samantha는 완료된 다양한 프로젝트의 총 개수를 찾는 데 관심이 있습니다.
프로젝트를 완료하는 데 걸린 일수를 기준으로 프로젝트 시작일과 종료일을 오름차순으로 출력하는 쿼리를 작성하세요. 완료 일수가 동일한 프로젝트가 두 개 이상인 경우 프로젝트 시작 날짜를 기준으로 정렬합니다.

  SELECT MIN(START_DATE)
       , MAX(END_DATE)
    FROM (
           SELECT START_DATE
                , END_DATE
                , LEAD(START_DATE) OVER(ORDER BY END_DATE)
                , ROW_NUMBER() OVER(ORDER BY START_DATE)
                , START_DATE - ROW_NUMBER() OVER(ORDER BY START_DATE) AS YSNO_CODE
             FROM PROJECTS
         ) SUB
GROUP BY YSNO_CODE
ORDER BY MAX(END_DATE)- MIN(START_DATE)
       , MIN(START_DATE)

Placements

학생, 친구, 패키지라는 세 개의 테이블이 제공됩니다. 학생에는 ID와 이름이라는 두 개의 열이 있습니다. 친구에는 ID와 Friend_ID(유일한 가장 친한 친구의 ID)라는 두 개의 열이 있습니다. 패키지에는 ID와 Salary(월 $1,000 단위로 제공되는 급여)라는 두 개의 열이 포함되어 있습니다.
가장 친한 친구가 자신보다 더 높은 연봉을 제안받은 학생의 이름을 출력하는 쿼리를 작성하세요. 이름은 가장 친한 친구에게 제공되는 급여 금액에 따라 정렬되어야 합니다. 두 명의 학생이 동일한 급여를 받지 못한다는 것이 보장됩니다.

   SELECT A.NAME
     FROM STUDENTS A
LEFT JOIN FRIENDS B
       ON A.ID = B.ID
LEFT JOIN PACKAGES C
       ON A.ID = C.ID
LEFT JOIN PACKAGES D
       ON B.FRIEND_ID = D.ID
    WHERE C.SALARY < D.SALARY
 ORDER BY D.SALARY

Symmetric Pairs

X와 Y라는 두 개의 열을 포함하는 Functions 테이블이 제공됩니다.
X1 = Y2 및 X2 = Y1인 경우 두 쌍 (X1, Y1) 및 (X2, Y2)는 대칭 쌍이라고 합니다.
모든 대칭 쌍을 X 값만큼 오름차순으로 출력하는 쿼리를 작성하세요. X1 ≤ Y1이 되는 행을 나열하세요.

  SELECT DISTINCT A.*
    FROM FUNCTIONS A
    JOIN FUNCTIONS B
      ON A.X = B.Y
     AND A.Y = B.X
GROUP BY A.X
       , A.Y
  HAVING COUNT(A.X) > 1 
      OR A.X < A.Y
ORDER BY A.X

1000보다 작거나 같은 모든 소수를 인쇄하는 쿼리를 작성하세요. 결과를 한 줄에 인쇄하고 공백 대신 앰퍼샌드(&) 문자를 구분 기호로 사용합니다.
예를 들어, 모든 소수 <= 10에 대한 출력은 다음과 같습니다.
2&3&5&7

WITH RECURSIVE NUMBERS AS (
	SELECT 2 AS N
     UNION ALL
    SELECT 1+N 
      FROM NUMBERS 
     WHERE N<1000
)
SELECT GROUP_CONCAT(N SEPARATOR '&')
  FROM (
         SELECT *
              , CASE WHEN EXISTS (
              						SELECT NULL 
                                      FROM NUMBERS AS N_INNER 
                                     WHERE N_INNER.N > 1 
                                       AND N_INNER.N < NUMBERS.N 
                                       AND MOD(NUMBERS.N, N_INNER.N) = 0
                                  ) THEN 'NO PRIME' 
                     ELSE 'PRIME' 
                 END AS IS_PRIME
            FROM NUMBERS
       ) SUB
 WHERE SUB.IS_PRIME = 'PRIME'




Hard


MYSQL



Interviews

Samantha는 코딩 과제와 콘테스트를 통해 다양한 대학의 많은 지원자를 인터뷰합니다. Contest_id를 기준으로 정렬된 각 컨테스트에 대해 Contest_id, hacker_id, name 및 total_submissions, total_accepted_submissions, total_views 및 total_unique_views의 합계를 인쇄하는 쿼리를 작성합니다. 4개의 합계가 모두 0인 경우 결과에서 콘테스트를 제외합니다.
참고: 특정 콘테스트를 사용하여 둘 이상의 대학에서 후보자를 심사할 수 있지만 각 칼리지는 1개의 심사 콘테스트만 개최합니다.

   SELECT A.CONTEST_ID
        , A.HACKER_ID
        , A.NAME
        , SUM(E.SUM_TS)
        , SUM(E.SUM_TAS)
        , SUM(D.SUM_TV)
        , SUM(D.SUM_TUV)
     FROM CONTESTS A
LEFT JOIN COLLEGES B
       ON A.CONTEST_ID = B.CONTEST_ID
LEFT JOIN CHALLENGES C
       ON B.COLLEGE_ID = C.COLLEGE_ID
LEFT JOIN (
			  SELECT CHALLENGE_ID
                   , SUM(TOTAL_VIEWS) AS SUM_TV
                   , SUM(TOTAL_UNIQUE_VIEWS) AS SUM_TUV
		        FROM VIEW_STATS
		    GROUP BY CHALLENGE_ID
          ) D
       ON C.CHALLENGE_ID = D.CHALLENGE_ID
LEFT JOIN (
          	  SELECT CHALLENGE_ID
             	   , SUM(TOTAL_SUBMISSIONS) AS SUM_TS
            	   , SUM(TOTAL_ACCEPTED_SUBMISSIONS) AS SUM_TAS
                FROM SUBMISSION_STATS
            GROUP BY CHALLENGE_ID
          ) E
       ON C.CHALLENGE_ID = E.CHALLENGE_ID
 GROUP BY A.CONTEST_ID
        , A.HACKER_ID
        , A.NAME
   HAVING SUM(E.SUM_TS) != 0 
       OR SUM(E.SUM_TAS) != 0 
       OR SUM(D.SUM_TV) != 0 
       OR SUM(D.SUM_TUV) != 0
 ORDER BY A.CONTEST_ID



MSSQL



15 Days of Learning SQL

Julia는 15일간 SQL 학습 콘테스트를 진행했습니다. 콘테스트의 시작일은 2016년 3월 1일이고 종료일은 2016년 3월 15일입니다.
매일 최소 1개의 제출물을 제출한 고유 해커의 총 수를 출력하는 쿼리를 작성하고(대회 첫날부터), 매일 최대 제출물을 제출한 해커의 hacker_id와 이름을 찾습니다. 그러한 해커가 두 명 이상 제출할 수 있는 경우 가장 낮은 hacker_id를 인쇄합니다. 쿼리는 대회의 각 날짜에 대한 정보를 날짜별로 정렬하여 인쇄해야 합니다.

   SELECT SUB1.SUBMISSION_DATE
        , SUB1.CNT
        , SUB2.MIN_HACKER_ID
        , SUB2.NAME
     FROM ( // 과제를 제출해야하는 날에 실제로 과제를 제출한 학생 수
              SELECT A.SUBMISSION_DATE
                   , COUNT(DISTINCT B.HACKER_ID) AS CNT
                FROM ( // 과제를 제출해야하는 날짜
              		   SELECT SUBMISSION_DATE
                            , DENSE_RANK() OVER(ORDER BY SUBMISSION_DATE) AS RNK_DATE
                         FROM (
                                SELECT DISTINCT SUBMISSION_DATE 
                                  FROM SUBMISSIONS
                              ) A
                     ) A
           LEFT JOIN ( // 과제를 몇번 제출했는지
          			      SELECT A.SUBMISSION_DATE
                               , A.HACKER_ID
                               , B.NAME
                               , DENSE_RANK() OVER(PARTITION BY A.HACKER_ID ORDER BY  A.SUBMISSION_DATE) AS RNK_HACKER
                            FROM SUBMISSIONS A
                       LEFT JOIN HACKERS B
                              ON A.HACKER_ID = B.HACKER_ID
                     ) B
            	  ON A.SUBMISSION_DATE = B.SUBMISSION_DATE
            	 AND A.RNK_DATE = B.RNK_HACKER
            GROUP BY A.SUBMISSION_DATE
          ) SUB1
LEFT JOIN ( //일자별로 가장 많이 제출한 학생 중 HACKER_ID 가 가장 작은 1명의 이름
               SELECT C.SUBMISSION_DATE
                    , C.MIN_HACKER_ID
                    , D.NAME 
                 FROM ( // 일자별로 가장 많이 제출한 학생 중 HACKER_ID 가 가장 작은 1명
                          SELECT A.SUBMISSION_DATE
                               , MIN(A.HACKER_ID) AS MIN_HACKER_ID
                            FROM ( // 일자별로 학생이 제출한 과제 수
                                     SELECT SUBMISSION_DATE
                                          , HACKER_ID
                                          , COUNT(0) AS CNT
                                       FROM SUBMISSIONS
                                   GROUP BY SUBMISSION_DATE
                                          , HACKER_ID
                                 ) A
                            JOIN ( // 일자별로 가장 많이 제출한 횟수
                                     SELECT B.SUBMISSION_DATE
                                          , MAX(B.CNT) AS MAX_CNT
                        			   FROM ( 
                        						SELECT SUBMISSION_DATE
                        							 , HACKER_ID
                        							 , COUNT(0) AS CNT
                                                  FROM SUBMISSIONS
                                              GROUP BY SUBMISSION_DATE
                                                     , HACKER_ID
                                            ) B
                                   GROUP BY B.SUBMISSION_DATE
                                 ) C
                              ON A.SUBMISSION_DATE = C.SUBMISSION_DATE
                             AND A.CNT = C.MAX_CNT
                        GROUP BY A.SUBMISSION_DATE
                      ) C
            LEFT JOIN HACKERS D
                   ON C.MIN_HACKER_ID = D.HACKER_ID
          ) SUB2
       ON SUB1.SUBMISSION_DATE = SUB2.SUBM
 ORDER BY SUB1.SUBMISSION_DATE




0개의 댓글