<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ror_coding</title>
    <link>https://ror-coding.tistory.com/</link>
    <description>감자의 우당탕탕 데이터 분석 기록</description>
    <language>ko</language>
    <pubDate>Tue, 26 May 2026 07:21:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ro_rdil_31</managingEditor>
    <image>
      <title>ror_coding</title>
      <url>https://tistory1.daumcdn.net/tistory/6741839/attach/7780ac6801c5477ea19df45ce78e0a95</url>
      <link>https://ror-coding.tistory.com</link>
    </image>
    <item>
      <title>[LeetCode] 1321. Restaurant Growth</title>
      <link>https://ror-coding.tistory.com/165</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기존 코드도 좋지만, window function의 &lt;b&gt;연산 범위&lt;/b&gt;를 잘 익혀야 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mutRJ/btsProCWIIt/bXRvW7uiRf1f8WkNOUhSB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mutRJ/btsProCWIIt/bXRvW7uiRf1f8WkNOUhSB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mutRJ/btsProCWIIt/bXRvW7uiRf1f8WkNOUhSB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmutRJ%2FbtsProCWIIt%2FbXRvW7uiRf1f8WkNOUhSB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;328&quot; data-origin-width=&quot;337&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You are the restaurant owner and you want to analyze a possible expansion (there will be at least one customer every day).&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Compute the moving average of how much the customer paid in a seven days window (i.e., current day + 6 days before).&lt;span&gt;&amp;nbsp;&lt;/span&gt;average_amount&lt;span&gt;&amp;nbsp;&lt;/span&gt;should be&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;rounded to two decimal places&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Return the result table ordered by&lt;span&gt;&amp;nbsp;&lt;/span&gt;visited_on&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;in ascending order&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The result format is in the following example.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V1bxJ/btsPrpaMyGq/VPK9hkDSBPvKjNMjajFZFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V1bxJ/btsPrpaMyGq/VPK9hkDSBPvKjNMjajFZFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V1bxJ/btsPrpaMyGq/VPK9hkDSBPvKjNMjajFZFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV1bxJ%2FbtsPrpaMyGq%2FVPK9hkDSBPvKjNMjajFZFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;748&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (Window Function)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752903556964&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select distinct visited_on
        , sum(amount) over(order by visited_on range between interval 6 day preceding and current row) as amount
        , round( sum(amount) over(order by visited_on range between interval 6 day preceding and current row)/7 ,2) as average_amount

from customer
order by 1
limit 10000 offset 6&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (My Code)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752903524798&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select distinct c.visited_on
        , (select sum(amount)
                from customer
                where visited_on between c.visited_on - interval 6 day and c.visited_on) as amount
        , (select round(sum(amount)/7,2) 
                from customer
                where visited_on between c.visited_on - interval 6 day and c.visited_on) as average_amount

from customer c
where visited_on &amp;gt;= (select min(visited_on) + interval 6 day from customer)

order by 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/restaurant-growth/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;My Code&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Coding Test/SQL</category>
      <category>1321.restaurant growth</category>
      <category>LeetCode</category>
      <category>RESTAURANT</category>
      <category>restaurant growth</category>
      <category>SubQuery</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/165</guid>
      <comments>https://ror-coding.tistory.com/165#entry165comment</comments>
      <pubDate>Sat, 19 Jul 2025 14:41:01 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 1341. Movie Rating</title>
      <link>https://ror-coding.tistory.com/164</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제를 잘 읽자!!! subquery를 잘 활용하자..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ocCET/btsPrdVW69f/Vb4aH1DS9wM2yNYeChy0SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ocCET/btsPrdVW69f/Vb4aH1DS9wM2yNYeChy0SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ocCET/btsPrdVW69f/Vb4aH1DS9wM2yNYeChy0SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FocCET%2FbtsPrdVW69f%2FVb4aH1DS9wM2yNYeChy0SK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;680&quot; height=&quot;667&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Write a solution to:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Find the name of the user who has rated the greatest number of movies. In case of a tie, return the lexicographically smaller user name.&lt;/li&gt;
&lt;li&gt;Find the movie name with the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;highest average&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;rating in&lt;span&gt;&amp;nbsp;&lt;/span&gt;February 2020. In case of a tie, return the lexicographically smaller movie name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The&amp;nbsp;result format is in the following example.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0FUpm/btsPqSds3PI/0TKlOBhnaKXzJUyFgEOm2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0FUpm/btsPqSds3PI/0TKlOBhnaKXzJUyFgEOm2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0FUpm/btsPqSds3PI/0TKlOBhnaKXzJUyFgEOm2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0FUpm%2FbtsPqSds3PI%2F0TKlOBhnaKXzJUyFgEOm2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;498&quot; height=&quot;804&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752903314695&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select name as results
from users
where user_id = (
    select user_id
    from movierating
    join users using(user_id)
    group by 1
    order by count(*) desc, name
    limit 1
)

union all

select title as results
from movies
where movie_id = (
    select movie_id
    from movierating
    join movies using(movie_id)
    where created_at like '2020-02%'
    group by 1
    order by avg(rating) desc, title
    limit 1
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/movie-rating/description/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;My Code&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Coding Test/SQL</category>
      <category>1341. movie rating</category>
      <category>LeetCode</category>
      <category>movie rating</category>
      <category>SubQuery</category>
      <category>union all</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/164</guid>
      <comments>https://ror-coding.tistory.com/164#entry164comment</comments>
      <pubDate>Sat, 19 Jul 2025 14:37:21 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 626. Exchange Seats</title>
      <link>https://ror-coding.tistory.com/163</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;row_number() 로 홀짝을 구별하여 id에서 빼거나 더한 값을 id로 부여합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이름은 고정, id만 바뀜.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsIFbi/btsPqUCiYxW/6g08uUa2r1WFw4Wt8BkUP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsIFbi/btsPqUCiYxW/6g08uUa2r1WFw4Wt8BkUP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsIFbi/btsPqUCiYxW/6g08uUa2r1WFw4Wt8BkUP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsIFbi%2FbtsPqUCiYxW%2F6g08uUa2r1WFw4Wt8BkUP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;259&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Write a solution to swap the seat id of every two consecutive students. If the number of students is odd, the id of the last student is not swapped.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Return the result table ordered by&lt;span&gt;&amp;nbsp;&lt;/span&gt;id&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;in ascending order&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The result format is in the following example.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciy0ed/btsPoXgqSHJ/2QNTRBiX0hlmIdcK4zwry1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciy0ed/btsPoXgqSHJ/2QNTRBiX0hlmIdcK4zwry1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciy0ed/btsPoXgqSHJ/2QNTRBiX0hlmIdcK4zwry1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fciy0ed%2FbtsPoXgqSHJ%2F2QNTRBiX0hlmIdcK4zwry1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;356&quot; height=&quot;505&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752903143569&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select
    row_number() over(order by if(id % 2 = 0, id - 1, id + 1)) as id
    , student
from seat
order by 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (My Code)&lt;/blockquote&gt;
&lt;pre id=&quot;code_1752903103410&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select 
    case 
        when (id%2 = 1) and (id+1 in (select id from seat)) then id + 1
        when (id%2 = 0) then id - 1
        else id
    end as id
    , student
from seat 

order by 1
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/exchange-seats/description/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;My Code&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Coding Test/SQL</category>
      <category>626. exchange seats</category>
      <category>exchange seats</category>
      <category>LeetCode</category>
      <category>ROW_NUMBER</category>
      <category>WINDOW FUNCTION</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/163</guid>
      <comments>https://ror-coding.tistory.com/163#entry163comment</comments>
      <pubDate>Sat, 19 Jul 2025 14:34:35 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 1907. Count Salary Categories</title>
      <link>https://ror-coding.tistory.com/162</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;출력해야 하는 항목을 고정시킬 때, union all과 select 을 써서 left/right join 을 해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgDj9Q/btsPpV3kIK0/P3kt1kaxjDfUiukomwB2KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgDj9Q/btsPpV3kIK0/P3kt1kaxjDfUiukomwB2KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgDj9Q/btsPpV3kIK0/P3kt1kaxjDfUiukomwB2KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgDj9Q%2FbtsPpV3kIK0%2FP3kt1kaxjDfUiukomwB2KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;222&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Write a solution&amp;nbsp;to calculate the number of bank accounts for each salary category. The salary categories are:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;Low Salary&quot;: All the salaries&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;strictly less&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;than&lt;span&gt;&amp;nbsp;&lt;/span&gt;$20000.&lt;/li&gt;
&lt;li&gt;&quot;Average Salary&quot;: All the salaries in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;inclusive&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;range&lt;span&gt;&amp;nbsp;&lt;/span&gt;[$20000, $50000].&lt;/li&gt;
&lt;li&gt;&quot;High Salary&quot;: All the salaries&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;strictly greater&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;than&lt;span&gt;&amp;nbsp;&lt;/span&gt;$50000.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The result table&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;must&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;contain all three categories. If there are no accounts in a category,&amp;nbsp;return&amp;nbsp;0.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Return the result table in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;any order&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The&amp;nbsp;result format is in the following example.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CSe8P/btsPqLFozal/KlHbwWOTUiKN1elBq691x0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CSe8P/btsPqLFozal/KlHbwWOTUiKN1elBq691x0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CSe8P/btsPqLFozal/KlHbwWOTUiKN1elBq691x0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCSe8P%2FbtsPqLFozal%2FKlHbwWOTUiKN1elBq691x0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;448&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752902854286&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with count_acc as(
    select 
        case
            when income &amp;lt; 20000 then 'Low Salary'
            when (20000 &amp;lt;= income) and (income &amp;lt;= 50000) then 'Average Salary'
            when 50000 &amp;lt; income then 'High Salary'
            -- else 'Average Salary'
            end as &quot;category&quot;
    from accounts
)
select j.category
        , count(c.category) as accounts_count
from count_acc c
right join (select 'Low Salary' as category
            union all 
            select 'Average Salary' as category
            union all 
            select 'High Salary' as category
            ) j on c.category = j.category
group by 1
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/count-salary-categories/description/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;My code&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Coding Test/SQL</category>
      <category>advanced select and joins</category>
      <category>count salary categories</category>
      <category>join</category>
      <category>LeetCode</category>
      <category>select</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/162</guid>
      <comments>https://ror-coding.tistory.com/162#entry162comment</comments>
      <pubDate>Sat, 19 Jul 2025 14:29:53 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 1934. Confirmation Rate</title>
      <link>https://ror-coding.tistory.com/161</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;case when 으로 confirmed 일 때만 count 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;confirmation rate&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;of a user is the number of&lt;span&gt;&amp;nbsp;&lt;/span&gt;'confirmed'&lt;span&gt;&amp;nbsp;&lt;/span&gt;messages divided by the total number of requested confirmation messages. The confirmation rate of a user that did not request any confirmation messages is&lt;span&gt;&amp;nbsp;&lt;/span&gt;0. Round the confirmation rate to&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;two decimal&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;places.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Write a solution to find the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;confirmation rate&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;of each user.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Return the result table in&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;any order&lt;/b&gt;.&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The result format is in the following example.&lt;/p&gt;
&lt;div style=&quot;background-color: #282828; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;: Signups&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #608b4e;&quot;&gt;----------------+----------+&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;Column&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; Name &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; Type &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #608b4e;&quot;&gt;----------------+----------+&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; user_id &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; time_stamp &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #608b4e;&quot;&gt;----------------+----------+&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;user_id &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; the &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;column&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;unique&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; this &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;Each&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;row&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;contains&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; information about the signup &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;time&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; the &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ID user_id&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #282828; color: #d4d4d4;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;Table&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;: Confirmations&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #608b4e;&quot;&gt;----------------+----------+&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;Column&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; Name &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; Type &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #608b4e;&quot;&gt;----------------+----------+&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; user_id &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; time_stamp &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; action &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ENUM &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;|&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #608b4e;&quot;&gt;----------------+----------+&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;user_id&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; time_stamp&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; the &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;primary&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;combination &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; columns &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;unique&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; this &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;user_id &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; a &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;foreign&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;reference &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;column&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;to&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; the Signups &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;action &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; an ENUM &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;category&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; the type &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'confirmed'&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'timeout'&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;Each&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;row&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; this &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;table&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; indicates that the &lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;user&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;with&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; ID user_id requested a confirmation message at time_stamp &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; that confirmation message was either confirmed &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'confirmed'&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; expired without confirming &lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'timeout'&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;).&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;793&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIFTFU/btsPgzk8Ow3/5AcDhCAjMpKMLqr63qYvnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIFTFU/btsPgzk8Ow3/5AcDhCAjMpKMLqr63qYvnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIFTFU/btsPgzk8Ow3/5AcDhCAjMpKMLqr63qYvnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIFTFU%2FbtsPgzk8Ow3%2F5AcDhCAjMpKMLqr63qYvnk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;793&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;793&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752391597889&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select 
    s.user_id
    , round( count(case when action = 'confirmed' then 1 end) / count(*) ,2) as confirmation_rate

from signups s
left join confirmations c on s.user_id = c.user_id
group by 1
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/confirmation-rate/?envType=study-plan-v2&amp;amp;envId=top-sql-50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;My Code&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>Coding Test/SQL</category>
      <category>1934. confirmation rate</category>
      <category>Case When</category>
      <category>confirmation rate</category>
      <category>LeetCode</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/161</guid>
      <comments>https://ror-coding.tistory.com/161#entry161comment</comments>
      <pubDate>Sun, 13 Jul 2025 16:29:53 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode] 176. Second Highest Salary</title>
      <link>https://ror-coding.tistory.com/160</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;limit 1 offset 1; &amp;lt;- 2번째로 높은 값을 뽑기 위해 offset을 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Write a solution to find&amp;nbsp;the second highest&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;distinct&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;salary from the&lt;span&gt;&amp;nbsp;&lt;/span&gt;Employee&lt;span&gt;&amp;nbsp;&lt;/span&gt;table. If there is no second highest salary,&amp;nbsp;return&amp;nbsp;null (return&amp;nbsp;None in Pandas).&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The result format is in the following example.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Table:&lt;span&gt;&amp;nbsp;&lt;/span&gt;Employee&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #0f0f0f; color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;+-------------+------+ &lt;br /&gt;|&amp;nbsp;Column&amp;nbsp;Name&amp;nbsp;|&amp;nbsp;Type&amp;nbsp;| &lt;br /&gt;+-------------+------+ &lt;br /&gt;|&amp;nbsp;id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;int&amp;nbsp;&amp;nbsp;| &lt;br /&gt;|&amp;nbsp;salary&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;int&amp;nbsp;&amp;nbsp;| &lt;br /&gt;+-------------+------+ &lt;br /&gt;id&amp;nbsp;is&amp;nbsp;the&amp;nbsp;primary&amp;nbsp;key&amp;nbsp;(column&amp;nbsp;with&amp;nbsp;unique&amp;nbsp;values)&amp;nbsp;for&amp;nbsp;this&amp;nbsp;table. &lt;br /&gt;Each&amp;nbsp;row&amp;nbsp;of&amp;nbsp;this&amp;nbsp;table&amp;nbsp;contains&amp;nbsp;information&amp;nbsp;about&amp;nbsp;the&amp;nbsp;salary&amp;nbsp;of&amp;nbsp;an&amp;nbsp;employee.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XUquL/btsPfXUjtHt/OCS8wfb1kfMdVZJqh6SXx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XUquL/btsPfXUjtHt/OCS8wfb1kfMdVZJqh6SXx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XUquL/btsPfXUjtHt/OCS8wfb1kfMdVZJqh6SXx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXUquL%2FbtsPfXUjtHt%2FOCS8wfb1kfMdVZJqh6SXx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;606&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Point&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;limit 1 offset 1
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;offset 은 0부터 시작합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;limit n offset m = m번째부터 시작해서 n개를 가져옵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과 출력을 위한 2중 select문
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;subquery에 결과가 없을 때 아무것도 출력되지 않지만, 겉에 select를 해주면 null이 출력됩니다.&lt;/li&gt;
&lt;li&gt;null을 출력하지 않아도 된다면, select subquery부분만 메인으로 사용하면 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1752390775722&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select (select distinct salary 
        from employee
        order by 1 desc
        limit 1 offset 1
)as SecondHighestSalary&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Coding Test/SQL</category>
      <category>LeetCode</category>
      <category>select</category>
      <category>select subquery</category>
      <category>SubQuery</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/160</guid>
      <comments>https://ror-coding.tistory.com/160#entry160comment</comments>
      <pubDate>Sun, 13 Jul 2025 16:25:05 +0900</pubDate>
    </item>
    <item>
      <title>[HackerRank] Top Earners</title>
      <link>https://ror-coding.tistory.com/159</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에선 select 구문의 alias를 group by 에서 쓸 수 있다 !&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;We define an employee's&lt;span&gt;&amp;nbsp;&lt;/span&gt;total earnings&lt;span&gt;&amp;nbsp;&lt;/span&gt;to be their monthly&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;worked, and the&lt;span&gt;&amp;nbsp;&lt;/span&gt;maximum total earnings&lt;span&gt;&amp;nbsp;&lt;/span&gt;to be the maximum total earnings for any employee in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Employee&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;table. Write a query to find the&lt;span&gt;&amp;nbsp;&lt;/span&gt;maximum total earnings&lt;span&gt;&amp;nbsp;&lt;/span&gt;for all employees as well as the total number of employees who have maximum total earnings. Then print these values as&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;space-separated integers.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input Format&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Employee&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;table containing employee data for a company is described as follows:&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;191&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOI5pQ/btsOCkhqW56/w5k2Fv4Z6gkKzzAvAGpgw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOI5pQ/btsOCkhqW56/w5k2Fv4Z6gkKzzAvAGpgw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOI5pQ/btsOCkhqW56/w5k2Fv4Z6gkKzzAvAGpgw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOI5pQ%2FbtsOCkhqW56%2Fw5k2Fv4Z6gkKzzAvAGpgw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;191&quot; height=&quot;187&quot; data-origin-width=&quot;191&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;where&lt;span&gt;&amp;nbsp;&lt;/span&gt;employee_id&lt;span&gt;&amp;nbsp;&lt;/span&gt;is an employee's ID number,&lt;span&gt;&amp;nbsp;&lt;/span&gt;name&lt;span&gt;&amp;nbsp;&lt;/span&gt;is their name,&lt;span&gt;&amp;nbsp;&lt;/span&gt;months&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the total number of months they've been working for the company, and&lt;span&gt;&amp;nbsp;&lt;/span&gt;salary&lt;span&gt;&amp;nbsp;&lt;/span&gt;is the their monthly salary.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sample Input&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHkRaP/btsOAG0Eil7/mwpQPAWbgWusYA02iKFVRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHkRaP/btsOAG0Eil7/mwpQPAWbgWusYA02iKFVRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHkRaP/btsOAG0Eil7/mwpQPAWbgWusYA02iKFVRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHkRaP%2FbtsOAG0Eil7%2FmwpQPAWbgWusYA02iKFVRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;348&quot; height=&quot;398&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sample Output&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;basic&quot; style=&quot;background-color: #f7f8fd; color: #121418;&quot;&gt;&lt;code&gt;69952 1
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explanation&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;The table and earnings data is depicted in the following diagram:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RyXho/btsOB1oRiXW/9KXKKY5BghgxONC8dyZv70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RyXho/btsOB1oRiXW/9KXKKY5BghgxONC8dyZv70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RyXho/btsOB1oRiXW/9KXKKY5BghgxONC8dyZv70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRyXho%2FbtsOB1oRiXW%2F9KXKKY5BghgxONC8dyZv70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;439&quot; height=&quot;400&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (After 250821)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1755764994828&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select max(earnings), count(*) as cnt
from (select *, months * salary as earnings from employee) s
where earnings = (select max(months * salary) from employee)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (Before)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749883566862&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- where 절 서브쿼리
SELECT months * salary, count(*)
FROM employee
where months * salary = (SELECT max(months * salary) FROM employee)
group by 1

-- having 절 서브쿼리
select months * salary as earnings, count(*)
from employee
group by earnings -- MySQL에선 select 구문 alias를 여기서 쓸 수 있다 !
having earnings = (SELECT max(months * salary) FROM employee)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;now me&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;012&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/012.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/012.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;</description>
      <category>Coding Test/SQL</category>
      <category>alias</category>
      <category>hackerrank</category>
      <category>having</category>
      <category>having절</category>
      <category>sub query</category>
      <category>top earners</category>
      <category>WHERE절</category>
      <category>서브쿼리</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/159</guid>
      <comments>https://ror-coding.tistory.com/159#entry159comment</comments>
      <pubDate>Sat, 14 Jun 2025 15:47:25 +0900</pubDate>
    </item>
    <item>
      <title>[HackerRank] Type of Triangle</title>
      <link>https://ror-coding.tistory.com/156</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;삼각형이 되기 위한 세 변의 조건.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;Write a query identifying the&lt;span&gt;&amp;nbsp;&lt;/span&gt;type&lt;span&gt;&amp;nbsp;&lt;/span&gt;of each record in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;TRIANGLES&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;table using its three side lengths. Output one of the following statements for each record in the table:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;color: #35363f;&quot;&gt;&lt;b&gt;Equilateral&lt;/b&gt;: It's a triangle with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;sides of equal length.&lt;/li&gt;
&lt;li style=&quot;color: #35363f;&quot;&gt;&lt;b&gt;Isosceles&lt;/b&gt;: It's a triangle with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;sides of equal length.&lt;/li&gt;
&lt;li style=&quot;color: #35363f;&quot;&gt;&lt;b&gt;Scalene&lt;/b&gt;: It's a triangle with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;sides of differing lengths.&lt;/li&gt;
&lt;li style=&quot;color: #35363f;&quot;&gt;&lt;b&gt;Not A Triangle&lt;/b&gt;: The given values of&lt;span&gt;&amp;nbsp;&lt;/span&gt;A,&lt;span&gt;&amp;nbsp;&lt;/span&gt;B, and&lt;span&gt;&amp;nbsp;&lt;/span&gt;C&lt;span&gt;&amp;nbsp;&lt;/span&gt;don't form a triangle.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Input Format&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;The&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;TRIANGLES&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;table is described as follows:&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/urgKc/btsOADCSXOv/yfthCJ5j6PWqtKk7X4GvW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/urgKc/btsOADCSXOv/yfthCJ5j6PWqtKk7X4GvW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/urgKc/btsOADCSXOv/yfthCJ5j6PWqtKk7X4GvW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FurgKc%2FbtsOADCSXOv%2FyfthCJ5j6PWqtKk7X4GvW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;319&quot; height=&quot;181&quot; data-origin-width=&quot;319&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;Each row in the table denotes the lengths of each of a triangle's three sides.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sample Input&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjBBM8/btsOBf9fnKQ/MsZdyVKiIW8ZRYIWWSzoHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjBBM8/btsOBf9fnKQ/MsZdyVKiIW8ZRYIWWSzoHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjBBM8/btsOBf9fnKQ/MsZdyVKiIW8ZRYIWWSzoHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjBBM8%2FbtsOBf9fnKQ%2FMsZdyVKiIW8ZRYIWWSzoHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;313&quot; height=&quot;219&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;p style=&quot;color: #35363f;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sample Output&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;dns&quot; style=&quot;background-color: #f7f8fd; color: #121418;&quot;&gt;&lt;code&gt;Isosceles
Equilateral
Scalene
Not A Triangle
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #121418; text-align: start;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rxf4L/btsOCkIrRJh/XFT6vJYW2ozVS8s0XXk1Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rxf4L/btsOCkIrRJh/XFT6vJYW2ozVS8s0XXk1Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rxf4L/btsOCkIrRJh/XFT6vJYW2ozVS8s0XXk1Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frxf4L%2FbtsOCkIrRJh%2FXFT6vJYW2ozVS8s0XXk1Tk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;227&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Point&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;세 변의 길이가 같을 때&lt;/b&gt; 먼저,&lt;/li&gt;
&lt;li&gt;한 변이 다른 두 변의 합보다 크거나 같을 때&lt;b&gt; 삼각형이 아니기 때문에 예외 처리&lt;/b&gt;를 두 번째에,&lt;/li&gt;
&lt;li&gt;이후 &lt;b&gt;두 변이 같을 때&lt;/b&gt; (이때, 세 변이 같은 케이스는 첫 번째때 리턴했기 때문에 문제 없음)&lt;/li&gt;
&lt;li&gt;마지막 else 구문은 &lt;b&gt;세 변의 길이가 모두 다를 때&lt;/b&gt;로 처리됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749879859742&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    CASE
        WHEN A=B AND B=C THEN 'Equilateral'
        WHEN (A+B &amp;lt;= C) OR (B+C &amp;lt;= A) OR (C+A &amp;lt;= B) THEN 'Not A Triangle'
        WHEN A=B OR A=C OR B=C THEN 'Isosceles'
        ELSE 'Scalene'  
    END
FROM TRIANGLES&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;now me&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;016&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/016.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/016.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;</description>
      <category>Coding Test/SQL</category>
      <category>hackerrank</category>
      <category>type of triangle</category>
      <category>삼각형</category>
      <category>세변의 길이</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/156</guid>
      <comments>https://ror-coding.tistory.com/156#entry156comment</comments>
      <pubDate>Sat, 14 Jun 2025 14:46:34 +0900</pubDate>
    </item>
    <item>
      <title>[HackerRank] Symmetric Pairs</title>
      <link>https://ror-coding.tistory.com/155</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;20 20이 self join하는 예외 케이스 나눠서 풀기 !&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Question&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You are given a table,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Functions, containing two columns:&lt;span&gt;&amp;nbsp;&lt;/span&gt;X&amp;nbsp;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;Y.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWYtbu/btsOA3OyV4o/J0QxExUtYgp31nTFxrgW00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWYtbu/btsOA3OyV4o/J0QxExUtYgp31nTFxrgW00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWYtbu/btsOA3OyV4o/J0QxExUtYgp31nTFxrgW00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWYtbu%2FbtsOA3OyV4o%2FJ0QxExUtYgp31nTFxrgW00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;316&quot; height=&quot;138&quot; data-origin-width=&quot;316&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Two pairs&lt;span&gt;&amp;nbsp;&lt;/span&gt;(X1, Y1)&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;(X2, Y2)&lt;span&gt;&amp;nbsp;&lt;/span&gt;are said to be&lt;span&gt;&amp;nbsp;&lt;/span&gt;symmetric&lt;span&gt;&amp;nbsp;&lt;/span&gt;pairs&lt;span&gt;&amp;nbsp;&lt;/span&gt;if&amp;nbsp;X1&lt;span&gt;&amp;nbsp;&lt;/span&gt;= Y2&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;X2&lt;span&gt;&amp;nbsp;&lt;/span&gt;= Y1.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Write a query to output all such&lt;span&gt;&amp;nbsp;&lt;/span&gt;symmetric&lt;span&gt;&amp;nbsp;&lt;/span&gt;pairs&lt;span&gt;&amp;nbsp;&lt;/span&gt;in ascending order by the value of&lt;span&gt;&amp;nbsp;&lt;/span&gt;X. List the rows such that&lt;span&gt;&amp;nbsp;&lt;/span&gt;X1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;le; Y1.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sample Input&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CNoPJ/btsOAiyV6bo/ktIoitG8Z2kfrYA49qd53K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CNoPJ/btsOAiyV6bo/ktIoitG8Z2kfrYA49qd53K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CNoPJ/btsOAiyV6bo/ktIoitG8Z2kfrYA49qd53K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCNoPJ%2FbtsOAiyV6bo%2FktIoitG8Z2kfrYA49qd53K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;305&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;305&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #35363f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Sample Output&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;basic&quot; style=&quot;background-color: #f7f8fd; color: #121418; text-align: start;&quot;&gt;&lt;code&gt;20 20
20 21
22 23&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Point&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;20 20이 하나만 있을 때 서로 self join해서 20 20 20 20 이 되는 문제점 존재.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;-&amp;gt; X,Y가 같을 때 케이스를 따로 group by - count를 이용해서 2개 이상일 때 출력.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (After 250821)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1755764242065&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with base as(
    select x, y
    from Functions
    where (x, y) not in (select x, y 
                            from functions
                            where x = y
                            group by 1, 2
                            having count(*) = 1
                        )
)
select distinct a.x, a.y

from base a
join base b on a.x = b.y and a.y = b.x
where a.x &amp;lt;= a.y
order by 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Code (Before)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749878548076&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT X, Y -- 20 20이 하나만 있을 때 SELF JOIN 되는 케이스 방지.
FROM FUNCTIONS
WHERE X = Y
GROUP BY X, Y
HAVING COUNT(*) &amp;gt;= 2

UNION

SELECT F1.X, F1.Y
FROM FUNCTIONS F1
JOIN FUNCTIONS F2 ON (F1.X = F2.Y) AND (F1.Y = F2.X)
WHERE F1.X &amp;lt; F1.Y

ORDER BY 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;now me&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;020&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/020.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/020.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;</description>
      <category>Coding Test/SQL</category>
      <category>hackerrank</category>
      <category>symmetric pairs</category>
      <category>union</category>
      <category>union all</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/155</guid>
      <comments>https://ror-coding.tistory.com/155#entry155comment</comments>
      <pubDate>Sat, 14 Jun 2025 14:24:46 +0900</pubDate>
    </item>
    <item>
      <title>[그로스 해킹] AAR&amp;quot;R&amp;quot;R - 수익화 (Revenue)</title>
      <link>https://ror-coding.tistory.com/154</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Revenue 수익화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수익화 관리를 위해서는 서비스가&lt;b&gt; 어떤 비즈니스 모델을 가지고 있는지&lt;/b&gt;를 명확히 이해하고, 그 비즈니스 모델이 잘 작동하는지, 비용 대비 수익이 안정적인지를 &lt;b&gt;데이터로 확인할 수 있어야 합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I7JoW/btsOAxPFCMu/SHBGjg8wWOtRLXK4RTW5YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I7JoW/btsOAxPFCMu/SHBGjg8wWOtRLXK4RTW5YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I7JoW/btsOAxPFCMu/SHBGjg8wWOtRLXK4RTW5YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI7JoW%2FbtsOAxPFCMu%2FSHBGjg8wWOtRLXK4RTW5YK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;439&quot; height=&quot;439&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 수익화 관련 주요 지표 4가지&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. ARPU (Average Revenue Per User, 인당 평균 매출, 사용자 당 매출)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매자 수, 구매 건수, 매출과 같은 기본적인 지표를 제외하고 &lt;b&gt;수익화 측면에서 우선적으로 봐야 하는 중요한 지표&lt;/b&gt;입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 전반적인 수익화 상황을 보는 데 굉장이 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(단순히 매출이 많다, 적다는 수준이 아니라 이후 사용자가 늘어난다면 매출이 어떤 속도로 증가할지를 가늠하는 데 좋은 기준이 되기 때문입니다.)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1749793089922&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ARPU = Revenue / User
- ARPDAU = 일 매출 / DAU
- ARPWAU = 주간 매출 / WAU
- ARPMAU = 월간 매출 / MAU&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARPU는 시작과 끝이 있는&lt;b&gt; 특정 기간&lt;/b&gt;에 대한 지표입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 ARPU를 구하려면 먼저 전사적으로 통용되는 명확한 기준을 세워야 합니다. (일반적으로, 월 기준&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(ARPMAU)&lt;/span&gt;으로 집계합니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. ARPPU (Average Revenue Per Paying User, 결제자 인당 평균 매출)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARPPU가 ARPU와 &lt;u&gt;다른 점&lt;/u&gt;은 &lt;s&gt;전체 사용자&lt;/s&gt;가 아닌 '&lt;b&gt;결제자'만&lt;/b&gt;을 대상으로 한다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARPPU도 ARPU와 마찬가지로 &lt;b&gt;기간에 대한 정의가 필요&lt;/b&gt;합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1749793571375&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ARPPU = Revenue / Paying User&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. LTV (Lifetime Value, 고객 생애 가치) &lt;/b&gt;{== CLV (Customer Lifetime Value)}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTV는 한 명의 사용자가 진입하는 순간부터 이탈하는 순간까지의 &lt;b&gt;전체 활동 기간에 누적해서 발생시키는 수익&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgI9j0/btsOAjRb9D7/A9IDYuLtmhu8gnjCgvD7a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgI9j0/btsOAjRb9D7/A9IDYuLtmhu8gnjCgvD7a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgI9j0/btsOAjRb9D7/A9IDYuLtmhu8gnjCgvD7a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgI9j0%2FbtsOAjRb9D7%2FA9IDYuLtmhu8gnjCgvD7a1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;432&quot; height=&quot;245&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, &lt;b&gt;현실에서 이런 식의 계산은 사실상 불가능합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 보완하기 위한 방법은 다음과 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. LTR (Lifetime Revenue, 고객 생애 매출)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTV가 고객 한 명에 대한 기대 &lt;b&gt;수익&lt;/b&gt;이라면, LTR은 고객 한 명에 대한 기대 &lt;b&gt;매출&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTR을 계산할 때는 따로&lt;b&gt; 비용을 고려하지 않고&lt;/b&gt; &lt;b&gt;매출만&lt;/b&gt; 살펴보면 되기 때문에, 유지 비용이나 획득 비용을 고려하지 않아 계산이 비교적 간편합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fp3EY/btsOz5lmvHw/nw3zMJXxHnDMQQ5QCT2S70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fp3EY/btsOz5lmvHw/nw3zMJXxHnDMQQ5QCT2S70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fp3EY/btsOz5lmvHw/nw3zMJXxHnDMQQ5QCT2S70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFp3EY%2FbtsOz5lmvHw%2Fnw3zMJXxHnDMQQ5QCT2S70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;428&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월 기준으로 집계할 때 LTR은 월 별 결제 금액을 &lt;u&gt;&lt;b&gt;가입자&lt;/b&gt;&lt;/u&gt;로 나눠야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월별 가입자당 결제액을 모두 합산하여 나온 값이 1명의 가입자가 생겼을 때 기대할 수 있는 평균 매출(LTR) 입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 수익화 분석&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(1) LTR 활용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 시점의 가입자들이 모두 이탈하는 경우는 매우 드물기 때문에 현실적으로 LTR을 구하기는 쉽지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이를 활용할 때, 전체적인 LTR을 딱 떨어지는 숫자로 요약하는 것에 집착할 필요가 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LTR은 &lt;s&gt;전체 회원을 대상으로 하는 하나의 지표로 계산해서 관리&lt;/s&gt;하기보다는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코호트를 잘 나누고 &lt;b&gt;코호트별 LTR의 추이가 어떻게 변화하는지&lt;/b&gt; 살펴보는 편이 훨씬 더 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이때, 코호트 분류 기준은 '가입 시점'입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5wZnl/btsOz5Mp0Jy/KYCqaj0qCHsFiJYnNiKiNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5wZnl/btsOz5Mp0Jy/KYCqaj0qCHsFiJYnNiKiNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5wZnl/btsOz5Mp0Jy/KYCqaj0qCHsFiJYnNiKiNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5wZnl%2FbtsOz5Mp0Jy%2FKYCqaj0qCHsFiJYnNiKiNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;390&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가입 시점에 따른 코호트를 나누고 각 코호트의 LTR의 변화 그래프를 그려 보면 시간이 지남에 따라 LTR이 증가하는 속도와 높이를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림의 파란색 선이 LTR의 증가 추이를 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 기간별로 LTR이 증가하는 추이를 구한 후 CAC와 비교하면) 서비스의 수익 모델이 잘 동작하고 있는지, 마케팅 비용을 적절하게 사용하고 있는지 등을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 지표의 관계를 통해 인사이트를 얻을 수 있는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;특히 LTR과 CAC는 짝지어 확인하기에 매우 유용한 지표&lt;/b&gt;들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건강하게 성장하고 있는 서비스라면&lt;b&gt; LTR이 CAC를 빠르게 따라잡고 장기적으로 CAC의 몇 배수까지 높아져야&lt;/b&gt; 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6bsaB/btsOz0Etnln/9MdHjkLfhFaxIxjjTsBGDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6bsaB/btsOz0Etnln/9MdHjkLfhFaxIxjjTsBGDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6bsaB/btsOz0Etnln/9MdHjkLfhFaxIxjjTsBGDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6bsaB%2FbtsOz0Etnln%2F9MdHjkLfhFaxIxjjTsBGDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;121&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건강한 서비스라면 LTR이 CAC보다 충분히 커야 합니다. (즉, 아래 수식에서 a가 굉장히 큰 숫자여야 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LTR이 CAC보다 충분히 큰가?&lt;/b&gt; 라는 질문은 간단해 보이지만, 비즈니스의 생존 가능성을 확인하는 중요한 질문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 &lt;b&gt;LTR이 CAC의 5~10배&lt;/b&gt; 정도는 돼야 어느 정도 안정적인 서비스 운영을 기대할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;수익화 상황을 개선하기 위해&lt;br /&gt;고객 생애 매출을 늘리는 것과&lt;br /&gt;고객 획득 비용을 줄이는 것 중&lt;br /&gt;어떤 방법이 효과적일까요?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 비율이라면, &lt;b&gt;LTR을 늘리는 편&lt;/b&gt;이 CAC를 줄이는 것보다 &lt;b&gt;효과적&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 수익을 노핑기 위해서는 비용을 줄이는 것도 필요하지만 튼튼한 비즈니스 모델을 통해 사용자들이 지속적으로 결제하는 구조를 만드는 것이 더 중요합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cko6OB/btsOzLHvqiI/vGBfmFutHP0zQmaM1R2LCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cko6OB/btsOzLHvqiI/vGBfmFutHP0zQmaM1R2LCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cko6OB/btsOzLHvqiI/vGBfmFutHP0zQmaM1R2LCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcko6OB%2FbtsOzLHvqiI%2FvGBfmFutHP0zQmaM1R2LCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;565&quot; height=&quot;159&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 현실적으로 LTR보다는 CAC가 좀 더 변화시키기 쉬운 지표이기 때문에 이쪽에 먼저 집중하는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 현실에서는 이 두 지표를 다음과 같은 형태로 많이 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1749797324932&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. LTR 먼저 구함. 가입 코호트를 활용해 코호트별 비교 or LTR의 기간별 변화 추이 살펴보기.
2. LTR 고려해서 목표로 하는 CAC 수준을 정함.
	수입 구조나 마진을 고려해서 고객 생애 매출의 1/5 ~ 1/10 정도를 목표로 잡으면 좋음.
    	이 수치가 마케팅을 진행할 때의 의사결정 기준이 됨.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;(2) 수익화 쪼개서 보기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아이템별 매출의 합계 : 매출에 기여하는/하지 못하는 아이템, 판매량이 증가/감소한 아이템.&lt;/li&gt;
&lt;li&gt;사용자별 매출의 합계 : 성별, 연령대 같은 기본적인 정보 또는 가입 기간, 활동 여부 기준으로 사용자를 세그먼트로 분류.&lt;/li&gt;
&lt;li&gt;결제자 수 X ARPPU&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749797518064&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;매출 = 결제자수 X ARPPU
매출 = 활동회원 X 결제비율 X ARPPU
매출 = 가입자 X 리텐션 X 결제비율 X ARPPU
매출 = 설치수 X 가입전환율 X 리텐션 X 결제비율 X ARPPU&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 매출을 &lt;b&gt;퍼널에 따라&lt;/b&gt; 쪼개 보면&lt;b&gt; 매출이 증감하는 패턴&lt;/b&gt;을 &lt;b&gt;훨씬 더 세부적으로 파악&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(3) MRR (Monthly Recurring Revenue, 월별 반복 매출)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct9aHN/btsOArBHl0Y/4AJNEnyGqX5kgBt0Kw9i21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct9aHN/btsOArBHl0Y/4AJNEnyGqX5kgBt0Kw9i21/img.png&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;300&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.0154%; margin-right: 10px;&quot; data-widthpercent=&quot;53.64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct9aHN/btsOArBHl0Y/4AJNEnyGqX5kgBt0Kw9i21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct9aHN%2FbtsOArBHl0Y%2F4AJNEnyGqX5kgBt0Kw9i21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;644&quot; height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nxiAP/btsOz1Khhlv/0KZCQcUJtEgwgblVt7eYv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nxiAP/btsOz1Khhlv/0KZCQcUJtEgwgblVt7eYv0/img.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;325&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.8218%;&quot; data-widthpercent=&quot;46.36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nxiAP/btsOz1Khhlv/0KZCQcUJtEgwgblVt7eYv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnxiAP%2FbtsOz1Khhlv%2F0KZCQcUJtEgwgblVt7eYv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;603&quot; height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립적인 결제 이벤트가 발생하는 서비스가 아닌, &lt;b&gt;구독형 서비스&lt;/b&gt;에서는 &lt;b&gt;MRR을 사용&lt;/b&gt;하여 매출을 분석합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 수익화 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수익화 분석에서 유의해야 할 점은 대부분의 &lt;b&gt;수익화 지표가 대푯값&lt;/b&gt;의 형태로 계산되지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 수익화 정도는 사용자마다 편차가 상당히 큽니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파레토 법칙으로 알려진 20:80 비율 패턴을 흔히 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고액 결제자 몇 명의 행동 변화에 따라 ARPU나 ARPPU가 흔들릴 수 있기 때문에 매출에서의 평균값은 굉장히 주의해서 사용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 요약된 수익화 지표 하나만 보고 의사결정을 내리기보다는 사용자를 &lt;b&gt;다양한 방식으로 그루핑&lt;/b&gt;하고 &lt;b&gt;각 그룹에 맞는 운영 및 수익화 전략을 세우는 것&lt;/b&gt;이 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[출처] 양승화(2021), &quot;그로스 해킹&quot;, 위키북스, 03장 3.5&lt;/blockquote&gt;</description>
      <category>Data Analysis/Growth Hacking</category>
      <category>AARRR</category>
      <category>ARPPU</category>
      <category>ARPU</category>
      <category>ltr</category>
      <category>LTV</category>
      <category>mrr</category>
      <category>Revenue</category>
      <category>고객 생애 매출</category>
      <category>수익화</category>
      <category>월별 반복 매출</category>
      <author>ro_rdil_31</author>
      <guid isPermaLink="true">https://ror-coding.tistory.com/154</guid>
      <comments>https://ror-coding.tistory.com/154#entry154comment</comments>
      <pubDate>Sat, 14 Jun 2025 13:17:45 +0900</pubDate>
    </item>
  </channel>
</rss>