๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿฌ MySQL/HackerRank ํ’€์ด

[HackerRank] 15 Days of Learning SQL (Hard)

by Chloe._. 2022. 12. 14.

๋ชป ํ’€์–ด์„œ ๋‹ค๋ฅธ์‚ฌ๋žŒ ๋‹ต์•ˆ ๋ณด๊ณ  ๊ณต๋ถ€ํ–ˆ๋‹ค

FROM์ ˆ์ด ๊ฑฐ์˜ ์“ธ๋ชจ๊ฐ€ ์—†๊ณ  ๋„ค๊ฐœ์˜ ๊ฐ ์ปฌ๋Ÿผ์„ ๋‹ค ๋”ฐ๋กœ ๊ตฌํ•˜๋Š” ์ ‘๊ทผ์ด ์ธ์ƒ๊นŠ์—ˆ๋‹ค

ํ•ด์ปค๋žญํฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ํ”Œ๋žซํผ์ด ์•„๋‹Œ๋ฐ ์ด ๋ฌธ์ œ๋งŒ ๊ฐ‘์ž๊ธฐ ๊ธ‰๋ฐœ์ง„์ด๋‹ค ์ •๋ง ์–ด๋ ต๋‹ค

 

์ด๋Ÿฐ ๋‹ต์•ˆ์„ ๋‚ด์•ผ ํ•œ๋‹ค

์ปฌ๋Ÿผ1: ๋‚ ์งœ

์ปฌ๋Ÿผ2: ์ฒซ๋‚ ๋ถ€ํ„ฐ ์ง€๊ธˆ๊นŒ์ง€ ๋งค์ผ ์ตœ์†Œ1๋ฒˆ ์ด์ƒ ์ œ์ถœํ•œ ์‚ฌ๋žŒ์ˆ˜, ๋‚ ์ด ๊ฐˆ์ˆ˜๋ก ์ ์–ด์ง€๋Š” ๊น”๋Œ€๊ธฐ ํ˜•ํƒœ

์ปฌ๋Ÿผ3, ์ปฌ๋Ÿผ4: ์ด๋‚  ํ•˜๋ฃจ์— ํ•œํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์ œ์ถœํ•œ ์‚ฌ๋žŒ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„, ๊ฐ™์€ ํšŸ์ˆ˜์ธ ์‚ฌ๋žŒ ์žˆ์œผ๋ฉด id ๋‚ฎ์€๊ฑธ๋กœ

 

๋‚ ์งœ๋ณ„๋กœ ๊ทธ๋ฃน๋ฐ”์ดํ•ด์„œ ๋‹ค ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค!

ํŠนํžˆ ์ปฌ๋Ÿผ2๊ฐ€ ๊ตฌํ•˜๊ธฐ ์–ด๋ ต๋‹ค

 

SELECT s1.submission_date -- first column

        , (SELECT COUNT(DISTINCT s2.hacker_id) -- second column
        FROM submissions s2
        WHERE s2.submission_date = s1.submission_date
        AND (SELECT COUNT(DISTINCT s3.submission_date) 
            FROM submissions s3 
            WHERE s3.hacker_id = s2.hacker_id
            AND s3.submission_date < s1.submission_date) = DATEDIFF(s1.submission_date, '2016-03-01'))
            
     , (SELECT s2.hacker_id -- third column
        FROM submissions s2
        WHERE s2.submission_date = s1.submission_date
        GROUP BY hacker_id
        ORDER BY COUNT(submission_id) DESC, hacker_id
        LIMIT 1) AS what
        
    , (SELECT name FROM hackers WHERE hacker_id = what) -- fourth column
    
FROM (SELECT DISTINCT submission_date FROM submissions) s1
GROUP BY 1

์ค‘๋ณต์ œ๊ฑฐํ•œ ๊ณ ์œ ํ•œ ๋‚ ์งœ๋งŒ ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด s1.

์˜จ์ „ํ•œ ํ…Œ์ด๋ธ”์ด s2์™€ s3.

 

์ปฌ๋Ÿผ2(๋งค์ผ๋งค์ผ ์ œ์ถœํ•œ ์‚ฌ๋žŒ์ˆ˜) ๊ตฌํ•˜๊ธฐ:

1. ๋‚ ์งœ๋งŒ ์žˆ๋Š” s1๊ณผ ์‚ฌ๋žŒ์ •๋ณด๊ฐ€ ์žˆ๋Š” s2๋ฅผ s1๋‚ ์งœ =  s2๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•œ๋‹ค.

2. ๋™์ผํ•œ ๋‘ ํ…Œ์ด๋ธ” s2์™€ s3์„ s2.ํ•ด์ปคid = s3.ํ•ด์ปคid ๊ธฐ์ค€์œผ๋กœ ์…€ํ”„์กฐ์ธํ•œ๋‹ค.

3. s1๊ณผ s3์„ ์ด์šฉํ•œ ์กฐ๊ฑด์„ ๋งŒ๋“ ๋‹ค. [s1๋ณด๋‹ค ๊ณผ๊ฑฐ์ธ s3 ์—ญ๋Œ€ ์ œ์ถœ์ผ ๊ฐœ์ˆ˜ = ์ฒซ๋‚ ๋ถ€ํ„ฐ s1๊นŒ์ง€์˜ ์ผ์ˆ˜ ์ฐจ์ด] ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ํ•ด์ปค๋ฅผ ์ฐพ์œผ๋ฉด ๋งค์ผ๋งค์ผ ํ•œ ์‚ฌ๋žŒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด s1์ด 3์›” 4์ผ์ธ๋ฐ ์—ญ๋Œ€ ์ œ์ถœ์ผ์— 3์›” 1์ผ, 3์›” 2์ผ, 3์›” 3์ผ์ด ๋‹ค ์žˆ์œผ๋ฉด ์ขŒ๋ณ€์€ 3์ด๋‹ค. ์šฐ๋ณ€์˜ '2016-03-04' ๋นผ๊ธฐ '2016-03-01'์˜ ๊ฒฐ๊ณผ๋„ 3์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ day3๊นŒ์ง€ ์‚ผ์ผ์น˜ ์ œ์ถœ์„ ๋‹ค ํ–ˆ๋‹จ๊ฑฐ๋‹ค.

4. s1๋‚ ์งœ = s2๋‚ ์งœ๋กœ ๋˜์–ด์žˆ์œผ๋‹ˆ, s2์˜ ํ•ด์ปคid ์ˆ˜๋ฅผ ์„ผ๋‹ค.

๋‚ด ๋‹น์žฅ ์ˆ˜์ค€์—์„  s3์ด ๋”ฐ๋กœ ํ•„์š”ํ•˜๋‹ค ํŒ๋‹จํ•ด ์…€ํ”„์กฐ์ธํ•  ์ƒ๊ฐ์„ ํ•  ์ˆœ ์—†์„ ๊ฑฐ ๊ฐ™๋‹ค. s2์™€ s3๊ฐ€ ๋‘˜๋‹ค ๋“ฑ์žฅํ•˜๋Š” ์ด ํŒŒํŠธ๊ฐ€ ์ฟผ๋ฆฌ ๋ณด๋ฉด์„œ๋„ ์–ด๋ ค์› ๋‹ค. 

 

์ปฌ๋Ÿผ3,4(๋‹น์ผ ํ•˜๋ฃจ์˜ ์ตœ๋‹ค์ œ์ถœ์ž id, ์ด๋ฆ„) ๊ตฌํ•˜๊ธฐ:

์ปฌ๋Ÿผ3: ํ•ด์ปค ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน๋ฐ”์ด, ์ œ์ถœํšŸ์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ๊ณผ ์•„์ด๋”” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ, ์ฒซ์ค„๋งŒ LIMIT
์ปฌ๋Ÿผ4: ์ปฌ๋Ÿผ3์˜ ๋ณ„์นญ๊ณผ ๋™์ผํ•œ id์ผ ๋•Œ ์ด๋ฆ„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์ด๊ฑด ์–ด๋ ต์ง€ ์•Š๋‹ค.

 

 

'๐Ÿฌ MySQL > HackerRank ํ’€์ด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[HackerRank] Print Prime Numbers (Medium)  (0) 2022.11.24
[HackerRank] Ollivander's Inventory (Medium)  (1) 2022.11.15
[HackerRank] SQL Project Planning (Medium)  (0) 2022.11.09
[HackerRank] The PADS (Medium)  (0) 2022.11.07
[HackerRank] New Companies (Medium)  (0) 2022.11.01

๋Œ“๊ธ€