춘식이2
업글이✧
춘식이2
전체 방문자
오늘
어제
  • 분류 전체보기
    • Data Analysis
    • Python
    • SQL
    • Statistics

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • uv
  • NULL
  • coalesce
  • Codility
  • NVL
  • python3
  • window함수
  • SQL
  • ifnull
  • rank함수
  • 장바구니분석
  • pv
  • Jupyter
  • sql튜닝
  • hackerrank
  • 데이터분석
  • Python
  • Apriori
  • 데이터디스커버리
  • excel

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
춘식이2
SQL

hackerrank

SQL

hackerrank

2022. 6. 27. 14:32
hackerRank _ top earner_MAX

내가 쓴 답
SELECT months*salary AS earnings
, COUNT(employee_id) AS count
FROM EMPLOYEE
GROUP BY 1
ORDER BY months*salary DESC
LIMIT 1;

선생님 답
SELECT months*salary
, COUNT(*)
FROM EMPLOYEE
WHERE months*salary = (SELECT MAX(months*salary) FROM EMPLOYEE)
GROUP BY 1

 

HackerRank_Weather15 _ ROUND, 서브쿼리

SELECT ROUND(LONG_W,4)
FROM STATION
WHERE LAT_N = (SELECT MAX(LAT_N) FROM STATION WHERE LAT_N < 137.2345 );

 

#HackerRank_ Weather19_ROUND, SQRT, POWER

-- (MIN(LAT_N),MAX(LAT_N))
-- (MIN(LONG_W),MAX(LONG_W))

SELECT ROUND(SQRT(POWER(MIN(LAT_N)-MAX(LAT_N),2) + POWER((MIN(LONG_W)-MAX(LONG_W)),2)),4)
FROM STATION ;
HackerRank_Weather20_서브쿼리, WITH

내가쓴답
SELECT ROUND(LAT_N, 4)
FROM(
SELECT ROW_NUMBER() OVER(ORDER BY LAT_N) AS RNK
, LAT_N
FROM STATION
) AS A
WHERE RNK =ROUND((SELECT COUNT(LAT_N) FROM STATION)/2,0);

선생님 답
WITH ordering AS(
SELECT ROW_NUMBER() OVER(ORDER BY LAT_N) AS RNK
, LAT_N
FROM STATION )


SELECT ROUND(AVG(LAT_N),4)
FROM ordering
WHERE RNK = (SELECT FLOOR(AVG(RNK)) FROM ordering)
OR RNK = (SELECT CEIL(AVG(RNK)) FROM ordering)
HackerRank_Triangle_CASE

SELECT CASE WHEN (A=B AND B=C) THEN 'Equilateral'
WHEN (A+B<=C OR B+C<=A OR A+C<=B) THEN 'Not A Triangle'
WHEN (A=B OR B=C OR A=C) THEN 'Isosceles'
ELSE 'Scalene' END
FROM TRIANGLES;

 

&&Hacker Rank _ CONCAT, SUBSTR, LOWER

SELECT CONCAT(name,'(',SUBSTR(occupation,1,1),')')
FROM OCCUPATIONS
ORDER BY name ;

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

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

 

HackerRank_Occupation_RANK

SELECT MIN(CASE WHEN A.occupation='Doctor' THEN A.name ELSE NULL END ) AS doctor
, MIN(CASE WHEN A.occupation='Professor' THEN A.name ELSE NULL END) AS professor
, MIN(CASE WHEN A.occupation='Singer' THEN A.name ELSE NULL END ) AS singer
, MIN(CASE WHEN A.occupation='Actor' THEN A.name ELSE NULL END) AS actor
FROM 	(
		SELECT * , ROW_NUMBER() OVER(PARTITION BY occupation ORDER BY name) AS RNK
		FROM OCCUPATIONS
        ) A
GROUP BY RNK

 

HackerRAnk _ Root, Case when

내답
SELECT N
, CASE WHEN P IS NULL THEN 'Root'
WHEN N IN (SELECT P FROM BST ) THEN 'Inner'
ELSE 'Leaf' END
FROM BST
ORDER BY 1

선생님답
SELECT CASE WHEN P IS NULL THEN CONCAT(N,' Root' )
WHEN N IN (SELECT P FROM BST ) THEN CONCAT(N,' Inner')
ELSE CONCAT(N,' Leaf') END
FROM BST
ORDER BY N

 

HackerRank _ new company

SELECT A.company_code
, A.founder
, COUNT(DISTINCT D.lead_manager_code)
, COUNT(DISTINCT D.senior_manager_code)
, COUNT(DISTINCT D.manager_code)
, COUNT(DISTINCT D.employee_code)
FROM company A

LEFT JOIN Employee D
ON A.company_code = D.company_code
GROUP BY 1,2
ORDER BY 1 ;


선생님답,
SELECT A.company_code
, A.founder
, (	SELECT COUNT(DISTINCT lead_manager_code) 
	FROM lead_manager
	WHERE company_code = A.company_code) AS num_lead

, (	SELECT COUNT(DISTINCT senior_manager_code) 
	FROM senior_manager
	WHERE company_code = A.company_code) AS num_senior

, (	SELECT COUNT(DISTINCT manager_code) 
	FROM manager
	WHERE company_code = A.company_code) AS num_manager

, (	SELECT COUNT(DISTINCT employee_code) 
	FROM employee
	WHERE company_code = A.company_code) AS num_employee
FROM company AS A
ORDER BY 1 ASC;

 

 

HackerRank INNER JOIN

SELECT A.CONTINENT
, FLOOR(AVG(B.Population)) AS avg_city
FROM COUNTRY A
INNER JOIN CITY B
ON A.CODE = B.COUNTRYCODE
GROUP BY 1
ORDER BY 1

 

 

hacker RANK 범위 JOIN

내 답
SELECT CASE WHEN B.GRADE<8 THEN NULL ELSE A.NAME END
, B.GRADE
, A.MARKS
FROM STUDENTS A
JOIN GRADES B
ON A.MARKS BETWEEN B.MIN_MARK AND B.MAX_MARK
ORDER BY B.GRADE DESC , A.NAME ASC, A.MARKS ASC

 

HACKER RANK - JOIN

내가 푼 답
SELECT hacker_id
, name
, SUM(s_score) AS total_score
FROM 	( SELECT A.hacker_id
		, A.name
		, B.challenge_id
		, MAX(B.score) AS s_score
		FROM Hackers AS A
		LEFT JOIN Submissions AS B
		ON (A.hacker_id = B.hacker_id)
		GROUP BY A.hacker_id, A.name, B.challenge_id
        ) C
GROUP BY 1, 2
HAVING SUM(s_score) <> '0'
ORDER BY 3 DESC, 1


--선생님 답
SELECT A.hacker_id
, A.name
, SUM(max_score) AS total_score
FROM HACKERS A
INNER JOIN (SELECT hacker_id
			, challenge_id
			, MAX(score) AS max_score
			FROM Submissions
			GROUP BY 1,2
            ) B
ON (A.hacker_id = B.hacker_id)
GROUP BY 1, 2
HAVING SUM(max_score) <> '0'
ORDER BY 3 DESC, 1

 

짱짱어려윰 Hacker Rank_challenge


SELECT main.hacker_id
, main.name
, main.num
FROM(
	SELECT A.hacker_id
	, A.name
	, COUNT(B.challenge_id) AS num
	FROM HACKERS AS A
	INNER JOIN CHALLENGES AS B
	ON (A.hacker_id = B.hacker_id)
	GROUP BY A.hacker_id, A.name
    ) AS main
WHERE main.num = 	(SELECT max(cnt_challenge)
					FROM 	( 	
                    		SELECT COUNT(challenge_id) AS cnt_challenge
							FROM CHALLENGES
							GROUP BY hacker_id
                         	) t1 
                    )
OR main.num IN 		(SELECT cnt_challenge 
					FROM ( 	SELECT COUNT(challenge_id) AS cnt_challenge
							FROM CHALLENGES
							GROUP BY hacker_id
                         ) t2
					GROUP BY cnt_challenge
					HAVING COUNT(cnt_challenge)<2 )

ORDER BY main.num DESC, main.hacker_id

 

좀어려움, 다시풀어보기HACKER RANK - inner join

SELECT A.name
FROM students A
INNER JOIN packages B
ON A.id = B.id

INNER JOIN (SELECT C.id
, C.friend_id AS friend_id
, D.salary AS friend_salary
FROM friends C
INNER JOIN packages D
ON C.friend_id = D.id) E
ON A.id = E.id
WHERE B.salary < E.friend_salary
ORDER BY E.friend_salary

 

어려움!! JOIN 심화!!

SELECT tb1.start_date
, MIN(tb2.end_date)
FROM	(
		SELECT start_date
		FROM projects
		WHERE start_date NOT IN (SELECT end_date FROM projects)
    	) tb1
INNER JOIN
		(SELECT end_date
		FROM projects
		WHERE end_date NOT IN (SELECT start_date FROM projects)
        ) tb2
ON tb1.start_date < tb2.end_date
GROUP BY tb1.start_date
ORDER BY MIN(tb2.end_date)-tb1.start_date
		, tb1.start_date

 

Hacker Rank _ Blunder

SELECT CEIL(AVG(salary) - AVG(REPLACE (salary, '0','')))
FROM employees

 

다시품

SELECT DATE_FORMAT(A.visited_at - interval 9 hour, '%Y-%m-%d') AS d_date
, customer_id
, max(A.visited_at) as last_visit
FROM tbl_visit AS A
WHERE A.visited_at >='2020-07-01'
AND A.visited_at <
GROUP BY 1, 2

'SQL' 카테고리의 다른 글

Mysql 에 csv 파일 불러오기  (0) 2022.08.15
[SQL튜닝] SQL 성능 튜닝 기초 (INDEX, Cardinality, 점조건, 선분조건)  (0) 2022.06.28
실무 SQL 예제 2  (0) 2022.06.27
실무 SQL 예제  (0) 2022.06.27
Transaction 과 TCL  (0) 2022.06.27
    'SQL' 카테고리의 다른 글
    • Mysql 에 csv 파일 불러오기
    • [SQL튜닝] SQL 성능 튜닝 기초 (INDEX, Cardinality, 점조건, 선분조건)
    • 실무 SQL 예제 2
    • 실무 SQL 예제
    춘식이2
    춘식이2

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.