<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>데이터 분석</title>
    <link>https://hwangbyeongho.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 27 Jun 2026 02:41:54 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>딱한아이</managingEditor>
    <image>
      <title>데이터 분석</title>
      <url>https://tistory1.daumcdn.net/tistory/7032416/attach/7fe27979b7c34d1f9fae4dd9c80162e7</url>
      <link>https://hwangbyeongho.tistory.com</link>
    </image>
    <item>
      <title>비즈니스 대시보드 설계 프레임워크</title>
      <link>https://hwangbyeongho.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SMgkh/btsODmFQoaU/ySlEWDDHxnHNrqdvCKUtvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SMgkh/btsODmFQoaU/ySlEWDDHxnHNrqdvCKUtvk/img.png&quot; data-alt=&quot;프레임워크&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SMgkh/btsODmFQoaU/ySlEWDDHxnHNrqdvCKUtvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSMgkh%2FbtsODmFQoaU%2FySlEWDDHxnHNrqdvCKUtvk%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;836&quot; height=&quot;139&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;139&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프레임워크&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 요구사항 수집 : 문제 정의와 요구사항 구체화하는 단계 &lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;일반적으로 &lt;b&gt;이해관계자 유형&lt;/b&gt;에 따라 취할 수 있는 전략.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 63px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.186%; height: 21px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;C-Level (임원)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.814%; height: 21px;&quot;&gt;핵심 KPI와 인사이트만 빠르게 전달할 수 있도록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.186%; height: 21px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;분석가 동료&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.814%; height: 21px;&quot;&gt;직접 대시보드 액션을 통해 각자의 질문에 대한 인사이트를 찾을 수 있도록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.186%; height: 21px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;전체&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 80.814%; height: 21px;&quot;&gt;Tableau와 상호작용하는 방법을 모른다는 가정 하에 자세한 사용 방법 제시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대시보드는 &lt;b&gt;문제를 해결하기 위한 질문에서 시작해야 분명한 목적&lt;/b&gt;으로 설계 가능하다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; &lt;u&gt;&lt;b&gt;요구사항이 명확하지 않은 경우?&lt;/b&gt;&lt;/u&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;회사 비즈니스 내부 상황 &amp;amp; 산업군 도메인 지식(테크 블로그, 컨퍼런스 등)을 공부&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유저 데이터 활용 플로우를 더 효율화 시킬 수 있는 가상 시나리오 짜기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터 EDA로 경향성을 뜯어보고 문제를 먼저 정의하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;어떤 방법으로 어떤 효과를 볼 수 있을 지 구체적으로 정리해 보기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;✅ &lt;u&gt;&lt;b&gt;사용자의 구체적인 요구사항을 수집&lt;/b&gt;&lt;/u&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;요구사항을 수집한 후에 모든 요구사항에서 공통적으로 요구되는 하나의 큰 프로젝트 목표 설정(ex. 매출 향상, 이용 고객 수 모니터링)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;모든 요구사항을 반영한 하나의 대시보드를 제작할 수 없기 때문에 요구사항 우선순위를 정립(ex. 매출 KPI, 세부 카테고리 매출 인사이트)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이를 바탕으로 하나씩 제작해 나가면 큰 흐름에서 벗어나지 않고 핵심 시트 제작에만 집중이 가능하다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 2. 대시보드 와이어프레임 제작&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✅ &lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유저가 읽는 흐름을 고려한 배치&lt;/span&gt;&lt;/b&gt;&lt;/u&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;모든 유저는 이 대시보드를 &quot;읽는다&quot;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;정보 전달에 적합한 논리적인 레이아웃 및 플로우로 설계한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;중요한 정보는 최상단에 박스로 넣기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사람은 좌 &amp;gt; 우 / 상 &amp;gt; 하 로 정보를 읽기 때문에 중요 시트 or 인터랙션이 필요한 요소는 왼쪽 또는 상단에 배치하기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPHnd5/btsOCkvbh9j/mS8OYN4s6wcYhg8Ldeqr01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPHnd5/btsOCkvbh9j/mS8OYN4s6wcYhg8Ldeqr01/img.png&quot; data-alt=&quot;대시보드 구성 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPHnd5/btsOCkvbh9j/mS8OYN4s6wcYhg8Ldeqr01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPHnd5%2FbtsOCkvbh9j%2FmS8OYN4s6wcYhg8Ldeqr01%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;426&quot; height=&quot;262&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대시보드 구성 예시&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 효율적인 기능 구현&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;시트 제작하기&lt;/span&gt;&lt;/b&gt;&lt;/u&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;뷰를 만드는 데 필요한 Data Field 결정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;필요한 계산된 필드 작성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;워크시트를 잘 표현하는 제목 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;중요한 시트만 제작하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유저를 고려한 차트 선택하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;높은 수준의 인사이트를 발견할 수 있도록 필터, 매개변수 등을 활용하기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; &lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; 계산된 필드 작성시 팁&lt;/span&gt;&lt;/b&gt;&lt;/u&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터 추출, 원본 필터에서 대시보드에서 표시할 양을 제한 / 추출 상태에서 작업&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;&quot;&gt;복잡한 계산을 포함한 필터를 여러 시트에 적용할 때 마크 수가 너무 많을 경우 느려짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;&quot;&gt;매개변수의 계산을 정수 형태가 빠름, 유저 이해를 위해 문자열로 표시해야 한다면 다음으로 표시 기능 활용하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;&quot;&gt;COUNTD 는 가장 느린 집계 유형 중 하나이기 때문에 아껴서 사용하기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;&quot;&gt;복잡한 논리문의 경우에는 CASE 문이 IF ~ ELSEIF 문보다 더 빠를 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;워크북 성능 확인하기&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;각 대시보드 별 어떤 이벤트가 있을 때마다 시간이 어느 정도 소요되었는지를 계산해서 보여준다&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 4. UX 디자인&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✅&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;u&gt;&lt;b&gt;컬러&lt;/b&gt;&lt;/u&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;주요 색상은 1-2개만 사용하기 : 대시보드 Noise ⬇️ Signal ⬆️&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;읽는 유저의 입장을 생각함과 동시에 목적성을 가지고 컬러 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✅&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;u&gt;&lt;b&gt;아이콘&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;a title=&quot;Flaticon 아이콘 사이트 활용하기&quot; href=&quot;https://www.flaticon.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.flaticon.com/&lt;/a&gt;&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1749975891741&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Free Icons and Stickers - Millions of resources to download&quot; data-og-description=&quot;Download Free Icons and Stickers for your projects. Resources made by and for designers. PNG, SVG, EPS, PSD and CSS formats&quot; data-og-host=&quot;www.flaticon.com&quot; data-og-source-url=&quot;https://www.flaticon.com/&quot; data-og-url=&quot;https://www.flaticon.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vHfFq/hyY7246lA1/8yjheXSXcDBTiHMlHoVgFk/img.jpg?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/DOqHJ/hyY7ZUP3cG/DNUcKc6KHYlGDei6io6HkK/img.jpg?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676&quot;&gt;&lt;a href=&quot;https://www.flaticon.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.flaticon.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vHfFq/hyY7246lA1/8yjheXSXcDBTiHMlHoVgFk/img.jpg?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/DOqHJ/hyY7ZUP3cG/DNUcKc6KHYlGDei6io6HkK/img.jpg?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Free Icons and Stickers - Millions of resources to download&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download Free Icons and Stickers for your projects. Resources made by and for designers. PNG, SVG, EPS, PSD and CSS formats&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.flaticon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✅&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;u&gt;&lt;b&gt;폰트&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;한글의 경우, NOTO CJK 폰트를 주로 많이 활용. 사용하는 컴퓨터에 해당 폰트가 설치되어 있는 지 확인하는 것이 중요!&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;*&lt;b&gt;대시보드 개체별&lt;/b&gt; 글꼴 크기&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 27.6731%; height: 121px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8947%;&quot;&gt;&lt;b&gt;대시보드 Title &amp;amp; KPI&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.8597%; text-align: center;&quot;&gt;22~28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8947%;&quot;&gt;&lt;b&gt;워크시트 Title&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.8597%; text-align: center;&quot;&gt;11~14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8947%;&quot;&gt;&lt;b&gt;차트 헤더&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.8597%; text-align: center;&quot;&gt;9~10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.8947%;&quot;&gt;&lt;b&gt;추가 텍스트&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.8597%; text-align: center;&quot;&gt;8~10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tableau</category>
      <category>Tableau</category>
      <category>대시보드</category>
      <category>설계</category>
      <category>태블로</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/118</guid>
      <comments>https://hwangbyeongho.tistory.com/118#entry118comment</comments>
      <pubDate>Sun, 15 Jun 2025 17:32:02 +0900</pubDate>
    </item>
    <item>
      <title>보호소에서 중성화한 동물 | Lv.4</title>
      <link>https://hwangbyeongho.tistory.com/117</link>
      <description>&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. &lt;b&gt;보호소에 들어올 당시에는 &lt;u&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;중성화&lt;/span&gt;되지 않았지만&lt;/u&gt;, 보호소를 나갈 당시에는 &lt;u&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;중성화&lt;/span&gt;된&lt;/u&gt; 동물&lt;/b&gt;의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;참고 )&lt;/b&gt; 중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 56.7441%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8895%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 34.172%; text-align: center;&quot;&gt;sex_upon_intake/sex_upon_outcome&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8895%;&quot;&gt;중성화를 거치지 않은 경우&lt;/td&gt;
&lt;td style=&quot;width: 34.172%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start; background-color: #ffffff;&quot;&gt; Intact &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 21.8895%;&quot;&gt;중성화 된 경우&lt;/td&gt;
&lt;td style=&quot;width: 34.172%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start; background-color: #ffffff;&quot;&gt; Spayed&amp;nbsp;또는&amp;nbsp;Neutered &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1745480296579&quot; class=&quot;sql&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;# (1)
SELECT animal_id
     , animal_type
     , name
FROM animal_outs
WHERE animal_id IN (
    SELECT animal_id
    FROM animal_ins
    WHERE sex_upon_intake REGEXP 'Intact'
)
  AND sex_upon_outcome REGEXP 'Spayed|Neutered'
ORDER BY animal_id

# (2)
SELECT o.animal_id
     , o.animal_type
     , o.name
FROM animal_outs o
    JOIN animal_ins i ON o.animal_id = i.animal_id
                     AND i.sex_upon_intake REGEXP 'Intact'
                     AND o.sex_upon_outcome REGEXP 'Spayed|Neutered'
ORDER BY o.animal_id&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;✅ &lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1번 쿼리 : WHERE 절 다중행 서브쿼리&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;- animal_outs 테이블(보호소에서 입양 보낸 동물의 정보)에서 &lt;b&gt;보호소에 들어올 당시 중성화 되지 않은 animal_id 에 해당하는 동물&lt;/b&gt;이 필터링될 수 있도록 서브쿼리 작성&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;br /&gt;- &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;WHERE 절에 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;Spayed 또는 Neutered에 해당하는 조건을 &lt;b&gt;정규 표현식 REGEXP &lt;/b&gt;활용해 추가&lt;/span&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2번 쿼리 : JOIN&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;- 두 테이블을 animal_id를 기준으로 조인함과 동시에 &lt;b&gt;ON 절에 중성화 관련 조건을 추가&lt;/b&gt;하여, &lt;b&gt;조인 전에 먼저 필터링하여 불필요한 데이터를 줄인 것&lt;/b&gt;이 특징&lt;/span&gt;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <category>regexp</category>
      <category>다중행서브쿼리</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/117</guid>
      <comments>https://hwangbyeongho.tistory.com/117#entry117comment</comments>
      <pubDate>Thu, 24 Apr 2025 16:48:32 +0900</pubDate>
    </item>
    <item>
      <title>우유와 요거트가 담긴 장바구니 | Lv.4 | GROUP_CONCAT </title>
      <link>https://hwangbyeongho.tistory.com/116</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;데이터 분석 팀&lt;/b&gt;에서는 &lt;b&gt;우유(&lt;span style=&quot;color: #ee2323;&quot;&gt;Milk&lt;/span&gt;)와 요거트(&lt;span style=&quot;color: #f3c000;&quot;&gt;Yogurt&lt;/span&gt;)를 동시에 구입한 장바구니가 있는지&lt;/b&gt; 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 &lt;span style=&quot;color: #5733b1;&quot;&gt;SQL&lt;/span&gt; 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.&lt;/span&gt;&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;323&quot; data-origin-height=&quot;189&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKfCrX/btsNrrXWZYr/09KoM2sMv6wHckAKFRfKx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKfCrX/btsNrrXWZYr/09KoM2sMv6wHckAKFRfKx0/img.png&quot; data-alt=&quot;테이블 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKfCrX/btsNrrXWZYr/09KoM2sMv6wHckAKFRfKx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKfCrX%2FbtsNrrXWZYr%2F09KoM2sMv6wHckAKFRfKx0%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;270&quot; height=&quot;158&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;189&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테이블 예시&lt;/figcaption&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;먼저, &lt;b&gt;CONCAT&lt;/b&gt; 함수와 &lt;b&gt;CONCAT_WS&lt;/b&gt; 함수를 짚고 넘어가자.&amp;nbsp;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이 두 string 함수의 &lt;b&gt;공통점&lt;/b&gt;은 서로 다른 두 칼럼 값을 연결할 때 사용하기 유용하다는 점이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;한편, &lt;b&gt;차이점&lt;/b&gt;은 CONCAT_WS 함수는 Separator(구분자)를 인수에 명시적으로 지정할 수 있다는 것이다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745311451644&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT CONCAT(NAME, PRICE) AS con1
     , CONCAT(NAME, '-', PRICE) AS con2
     , CONCAT_WS('', NAME, PRICE) AS con_ws1
     , CONCAT_WS('-', NAME, PRICE) AS con_ws2
FROM cart_products
LIMIT 3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dep2AS/btsNvIKd5s2/NRkzKMrs8ZUMLeGAWNoJAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dep2AS/btsNvIKd5s2/NRkzKMrs8ZUMLeGAWNoJAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dep2AS/btsNvIKd5s2/NRkzKMrs8ZUMLeGAWNoJAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdep2AS%2FbtsNvIKd5s2%2FNRkzKMrs8ZUMLeGAWNoJAk%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;576&quot; height=&quot;108&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;108&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;하지만, 이 문제를 해결하기 위해서는 cart_id별 name 칼럼 값을 연결해줘야 한다. &lt;u&gt;즉, 서로 다른 두 칼럼 값이 아닌 &lt;b&gt;하나의 컬럼의 여러 값을 연결하는 목적&lt;/b&gt;을 갖는다.&lt;/u&gt;&amp;nbsp;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;따라서 &lt;b&gt;GROUP_CONCAT&lt;/b&gt; 함수를 활용하여 문제를 해결했다. &lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;물론 이 함수도 서로 다른 두 칼럼 값을 연결할 수 있다는 점을 참고하도록!&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1745328023027&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH step1 AS (
    SELECT cart_id
         , GROUP_CONCAT(DISTINCT name SEPARATOR ' ') AS con_name
    FROM cart_products
    GROUP BY cart_id
)
SELECT cart_id
FROM step1
WHERE REGEXP_LIKE(con_name, 'Milk')
  AND REGEXP_LIKE(con_name, 'Yogurt') -- con_name LIKE '%Milk%' AND con_name LIKE '%Yogurt%'
                                      -- con_name REGEXP 'Milk' AND con_name REGEXP 'Yogurt'                  
ORDER BY cart_id

/* CTE 없이

SELECT cart_id
FROM cart_products
GROUP BY cart_id
HAVING GROUP_CONCAT(DISTINCT name, price SEPARATOR ' ') REGEXP 'Milk' AND GROUP_CONCAT(DISTINCT name, price SEPARATOR ' ') REGEXP 'Yogurt'
ORDER BY cart_id

*/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&amp;nbsp;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;WITH 절 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;cart_id 칼럼 기준으로 name 칼럼 값을 연결하고 중복 값을 제거하기 위해 &lt;b&gt;DISTINCT&lt;/b&gt; 절을 사용한다. 이 과정에서 연결할 때 값 사이에 공백을 두기 위해, &lt;b&gt;SEPARATOR&lt;/b&gt; 을 명시&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;*SEPARATOR 인수의 기본값 is , (comma)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;메인 쿼리 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;우유와 요거트를 동시에 구입한 경우를 조회하기 위해 WHERE절에 &lt;b&gt;REGEXP_LIKE&lt;/b&gt;를 활용&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; 참고로, 만약 &lt;u&gt;우유 &lt;b&gt;또는&lt;/b&gt; 요거트&lt;/u&gt;를 구입한 경우를 알고자 한다면?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️REGEXP_LIKE(con_name, 'Milk|Yogurt') 활용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; REGEXP_LIKE 내에서 AND 연산을 구현하는 방법은 없다고 한다‼️&lt;/span&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;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.1/en/aggregate-functions.html#function_group-concat&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.mysql.com/doc/refman/9.1/en/aggregate-functions.html#function_group-concat&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1745327883826&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: MySQL 9.1 Reference Manual :: 14.19.1 Aggregate Function Descriptions&quot; data-og-description=&quot;14.19.1&amp;nbsp;Aggregate Function Descriptions This section describes aggregate functions that operate on sets of values. They are often used with a GROUP BY clause to group values into subsets. Table&amp;nbsp;14.29&amp;nbsp;Aggregate Functions Name Description AVG() Return the&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/9.1/en/aggregate-functions.html#function_group-concat&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/9.1/en/aggregate-functions.html#function_group-concat&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.1/en/aggregate-functions.html#function_group-concat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/9.1/en/aggregate-functions.html#function_group-concat&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 9.1 Reference Manual :: 14.19.1 Aggregate Function Descriptions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;14.19.1&amp;nbsp;Aggregate Function Descriptions This section describes aggregate functions that operate on sets of values. They are often used with a GROUP BY clause to group values into subsets. Table&amp;nbsp;14.29&amp;nbsp;Aggregate Functions Name Description AVG() Return the&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.1/en/string-functions.html#function_concat-ws&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dev.mysql.com/doc/refman/9.1/en/string-functions.html#function_concat-ws&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1745327913185&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MySQL :: MySQL 9.1 Reference Manual :: 14.8 String Functions and Operators&quot; data-og-description=&quot;14.8&amp;nbsp;String Functions and Operators Table&amp;nbsp;14.12&amp;nbsp;String Functions and Operators Name Description ASCII() Return numeric value of left-most character BIN() Return a string containing binary representation of a number BIT_LENGTH() Return length of argument&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/9.1/en/string-functions.html#function_concat-ws&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/9.1/en/string-functions.html#function_concat-ws&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.1/en/string-functions.html#function_concat-ws&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/9.1/en/string-functions.html#function_concat-ws&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 9.1 Reference Manual :: 14.8 String Functions and Operators&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;14.8&amp;nbsp;String Functions and Operators Table&amp;nbsp;14.12&amp;nbsp;String Functions and Operators Name Description ASCII() Return numeric value of left-most character BIN() Return a string containing binary representation of a number BIT_LENGTH() Return length of argument&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <category>group_concat</category>
      <category>regexp</category>
      <category>regexp_like</category>
      <category>separator</category>
      <category>프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/116</guid>
      <comments>https://hwangbyeongho.tistory.com/116#entry116comment</comments>
      <pubDate>Tue, 22 Apr 2025 17:47:17 +0900</pubDate>
    </item>
    <item>
      <title>자동차 대여 기록 별 대여 금액 구하기 | Lv.4</title>
      <link>https://hwangbyeongho.tistory.com/115</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;c&lt;/span&gt;)&lt;/b&gt; CAR_RENTAL_COMPANY_CAR 테이블과 &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;h&lt;/span&gt;&lt;/b&gt;) CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;p&lt;/b&gt;&lt;/span&gt;) CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '&lt;span style=&quot;color: #ee2323;&quot;&gt;트럭&lt;/span&gt;'인 자동차의 대여 기록에 대해서 &lt;span style=&quot;color: #f89009;&quot;&gt;대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력&lt;/span&gt;하는 &lt;span style=&quot;color: #8a3db6;&quot;&gt;SQL&lt;/span&gt;문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대여 금액은 '대여 기간'에 따라 차등적으로 계산된다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1) '대여 기간' = end_date - start_date + 1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2) 자동차 종류가 트럭인 경우, '7일 이상' - &lt;b&gt;5% 할인율&lt;/b&gt; / '30일 이상' - &lt;b&gt;7% 할인율&lt;/b&gt; / '90일 이상' - &lt;b&gt;10% 할인율&lt;/b&gt; 적용&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;c - 자동차 대여 회사에서 대여 중인 자동차들의 정보를 담은 테이블&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;h - 자동차 대여 기록 정보를 담은 데이블&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;p - 자동차 종류 및 대여 기간 종류 별 할인 정책 정보를 담은 테이블&lt;/span&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;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 풀이&amp;nbsp; &lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;우선 자동차 종류가 '트럭'에 해당하는 c 테이블과 h 테이블을 car_id 기준으로 조인함과 동시에, '대여 기간'을 집계한다.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745234145608&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT h.history_id
     , c.daily_fee
     , c.car_type
     , DATEDIFF(h.end_date, h.start_date) + 1 AS duration
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
JOIN CAR_RENTAL_COMPANY_CAR c ON h.car_id = c.car_id AND c.car_type = '트럭'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9lOmU/btsNtiNp30g/hvxYTlYXASAGVCeGiXrMV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9lOmU/btsNtiNp30g/hvxYTlYXASAGVCeGiXrMV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9lOmU/btsNtiNp30g/hvxYTlYXASAGVCeGiXrMV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9lOmU%2FbtsNtiNp30g%2FhvxYTlYXASAGVCeGiXrMV0%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;641&quot; height=&quot;126&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;188&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위와 같은 결과를 반환하는 테이블을 CTE로 임시 저장하여, 아래의 메인 쿼리를 작성한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1745234792643&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH step1 AS (
    SELECT h.history_id
         , c.daily_fee
         , c.car_type -- ONLY 트럭
         , DATEDIFF(h.end_date, h.start_date) + 1 AS duration
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
        JOIN CAR_RENTAL_COMPANY_CAR c ON h.car_id = c.car_id AND c.car_type = '트럭'

)
SELECT history_id
     , ROUND(CASE 
                WHEN duration &amp;lt; 7 THEN daily_fee * duration
                WHEN duration &amp;lt; 30 THEN daily_fee * (SELECT (1-discount_rate/100) 
                                                                         FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN p
                                                                         WHERE p.car_type = '트럭' AND duration_type = '7일 이상') * duration
                WHEN duration &amp;lt; 90 THEN daily_fee * (SELECT (1-discount_rate/100) 
                                                                          FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN p
                                                                          WHERE p.car_type = '트럭' AND duration_type = '30일 이상') * duration
                ELSE daily_fee * (SELECT (1-discount_rate/100) 
                                    FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN p
                                    WHERE p.car_type = '트럭' AND duration_type = '90일 이상') * duration
             END, 0) AS fee 
FROM step1 s 
ORDER BY fee DESC, history_id DESC

/*
WITH step2 AS (
    SELECT *
         , CASE
              WHEN duration &amp;gt;= 90 THEN (SELECT discount_rate/100 FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE car_type = '트럭' AND duration_type  = '90일 이상') -- 10 -&amp;gt; 0.1
              WHEN duration &amp;gt;= 30 THEN (SELECT discount_rate/100 FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE car_type = '트럭' AND duration_type  = '30일 이상')
              WHEN duration &amp;gt;= 7 THEN (SELECT discount_rate/100 FROM CAR_RENTAL_COMPANY_DISCOUNT_PLAN WHERE car_type = '트럭' AND duration_type  = '7일 이상')
              ELSE 0
           END AS discount_rate
    FROM (
        SELECT h.history_id
             , c.daily_fee
             , c.car_type 
             , DATEDIFF(h.end_date, h.start_date) + 1 AS duration
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
            JOIN CAR_RENTAL_COMPANY_CAR c ON h.car_id = c.car_id AND c.car_type = '트럭'
    ) step1
)
SELECT history_id
     , ROUND(daily_fee * (1-discount_rate) * duration, 0) AS fee
FROM step2
ORDER BY fee DESC, history_id DESC
*/&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 39.0688%; height: 84px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.3952%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대여 기간&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0701%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;할인율&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.3952%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;7일 미만&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0701%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.3952%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;7일 이상 30일 미만&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0701%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.3952%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;30일 이상 90일 미만&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0701%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;7&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 29.3952%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;90일 이상&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0701%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;span style=&quot;color: #ee2323; background-color: #f6e199; font-family: 'Noto Sans Light';&quot;&gt;*대여 금액 = 일일 요금 x (1-할인율/100) x 대여 기간&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대여 기간에 따라 각각 다른 할인율을 적용해야 하기 때문에 메인 쿼리의 SELECT 절에 상관 서브쿼리를 이용해서 해결했다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EZKLD/btsNuxh1LNv/WbcEkRCE9pMCd7hOablIK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EZKLD/btsNuxh1LNv/WbcEkRCE9pMCd7hOablIK0/img.png&quot; data-alt=&quot;최종 결과 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EZKLD/btsNuxh1LNv/WbcEkRCE9pMCd7hOablIK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEZKLD%2FbtsNuxh1LNv%2FWbcEkRCE9pMCd7hOablIK0%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;624&quot; height=&quot;118&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 결과 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <category>프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/115</guid>
      <comments>https://hwangbyeongho.tistory.com/115#entry115comment</comments>
      <pubDate>Mon, 21 Apr 2025 20:35:02 +0900</pubDate>
    </item>
    <item>
      <title>특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 | Lv.4 </title>
      <link>https://hwangbyeongho.tistory.com/114</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '&lt;span style=&quot;color: #ee2323;&quot;&gt;세단&lt;/span&gt;' 또는 '&lt;span style=&quot;color: #ee2323;&quot;&gt;SUV&lt;/span&gt;' 인 자동차 중 &lt;span style=&quot;color: #ef5369;&quot;&gt;2022년 11월 1일부터 2022년 11월 30일까지 대여 가능&lt;/span&gt;하고 &lt;span style=&quot;color: #f89009;&quot;&gt;30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차&lt;/span&gt;에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1744631419947&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT a.car_id
     , a.car_type
     , ROUND(a.daily_fee * (1 - c.discount_rate/100) * 30, 0) AS fee
FROM CAR_RENTAL_COMPANY_CAR a
    LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY b ON a.car_id = b.car_id
    LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN c ON a.car_type = c.car_type
WHERE a.car_type IN ('세단', 'SUV')
  AND c.duration_type = '30일 이상'
GROUP BY a.car_id, a.car_type
HAVING MAX(b.end_date) &amp;lt; '2022-11-01' AND fee &amp;gt;= 500000 AND fee &amp;lt; 2000000
ORDER BY fee DESC, a.car_type, a.car_id DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;WHERE 절 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;자동차 종류가 '세단', 'SUV'인 조건을 추가한다. 또한 30일 간의 대여 금액을 구해야 하기 때문에 '30일 이상'일 때의 할인율 조건을 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;GROUP BY &amp;amp; HAVING 절 : ⭐&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;car_id 기준, 대여 종료일의 최대값이 11월 1일 이전이라면 문제의 조건을 만족하게 된다. 또한 할인율을 적용한 대여 금액이 문제의 조건을 만족하게 설정한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; 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;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;피드백&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1744632086448&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH preprocessed AS (
    SELECT a.car_id
         , a.car_type
         , ROUND(a.daily_fee * (1 - c.discount_rate/100) * 30, 0) AS fee
    FROM CAR_RENTAL_COMPANY_CAR a
         LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY b ON a.car_id = b.car_id
         LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN c ON a.car_type = c.car_type
    WHERE a.car_type IN ('세단', 'SUV')
       AND ( (b.start_date &amp;lt; '2022-11-01' AND b.end_date &amp;lt; '2022-11-01')
             OR (b.start_date &amp;gt; '2022-11-30' AND b.end_date &amp;gt; '2022-11-30') )
   AND c.duration_type = '30일 이상'
)
SELECT DISTINCT * 
FROM preprocessed
WHERE fee &amp;gt;= 500000 AND fee &amp;lt; 2000000
ORDER BY fee DESC, car_type, car_id DESC&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;  해당 쿼리는 정답을 맞추기 전에 시도한 쿼리이다. WHERE 절의 2번째 조건에 크나큰 &lt;u&gt;논리적 결함&lt;/u&gt;이 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블은 자동차 대여 기록 정보를 담고 있는 테이블로 동일한 car_id의 여러 대여 기록이 존재한다. WHERE 절 조건은 row 기준으로 적용되기 때문에, 27(car_id)처럼 날짜 조건을 만족하는 다른 대여 기록이 있는 경우 해당 차량이 최종 결과에 포함될 수 있다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efkNBe/btsNkwkBxRk/MdTeqVS7cu5sfdYXWxeeRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efkNBe/btsNkwkBxRk/MdTeqVS7cu5sfdYXWxeeRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efkNBe/btsNkwkBxRk/MdTeqVS7cu5sfdYXWxeeRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FefkNBe%2FbtsNkwkBxRk%2FMdTeqVS7cu5sfdYXWxeeRK%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;879&quot; height=&quot;193&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;193&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;car_id 27은 12월 24일 반납 기록이 존재하여 11월 1일 ~ 30일 기간동안 대여가 불가능하지만 최종 결과에 포함된다는 이야기이다. 따라서 해당 조건을 다른 방법으로 구현해야 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <category>groupby</category>
      <category>having</category>
      <category>LEFTJOIN</category>
      <category>프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/114</guid>
      <comments>https://hwangbyeongho.tistory.com/114#entry114comment</comments>
      <pubDate>Mon, 14 Apr 2025 21:21:33 +0900</pubDate>
    </item>
    <item>
      <title>오랜 기간 보호한 동물(2) | Lv.3</title>
      <link>https://hwangbyeongho.tistory.com/113</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 문제&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;입양을 간 동물&lt;/b&gt; 중, &lt;b&gt;보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회&lt;/b&gt;하는 &lt;span style=&quot;color: #f89009;&quot;&gt;SQL&lt;/span&gt;문을 작성해 주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이(1)&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1744113963914&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT o.animal_id
     , o.name
FROM ANIMAL_INS i -- 동물 보호소에 들어온 동물 정보 테이블
    LEFT JOIN ANIMAL_OUTS o ON i.animal_id = o.animal_id -- 동물 보호소에서 입양 보낸 동물 정보 테이블
WHERE i.animal_id IS NOT NULL -- 입양을 간 동물들만 필터링
ORDER BY DATEDIFF(o.datetime, i.datetime) DESC -- 얘를 별도 컬럼으로 만든 다음, WITH문으로 저장하고 최종 컬럼 조회할 필요 없이 
LIMIT 2&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;✅ &lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;WHERE 절 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ANIMAL_OUTS 테이블의 animal_id 값이 NULL인 경우는 보호소에 들어왔지만 아직 입양 가지 못한 동물들을 의미하기 때문에 NOT NULL 조건을 추가하여 입양을 간 동물들만 필터링한다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; ORDER BY &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;절 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보호 기간을 계산하기 위해 &lt;b&gt;DATEDIFF&lt;/b&gt; 함수를 사용하였으며, 이를 별도의 컬럼으로 가공한 뒤 필요한 컬럼을 조회하는 방향으로 쿼리를 작성하지 않고 바로 ORDER BY 절에 작성한다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; 참고로 DATEDIFF 함수의 날짜 계산은 차이 일 수를 반환하며, &lt;b&gt;&quot;날짜 인수1 - 날짜 인수2&quot;&lt;/b&gt; 순서로 이루어진다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;/span&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;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이(2)&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1744114321341&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT o.animal_id
     , o.name
FROM ANIMAL_INS i
    INNER JOIN ANIMAL_OUTS o ON i.animal_id = o.animal_id
ORDER BY TIMESTAMPDIFF(DAY, i.datetime, o.datetime) DESC
LIMIT 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; INNER JOIN&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ANIMAL_OUTS 테이블과 ANIMAL_OUTS 테이블을 내부 조인하여 입양을 간 동물들만 필터링한다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;ORDER BY&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;절 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보호 기간을 계산하기 위해 &lt;b&gt;TIMESTAMPDIFF&lt;/b&gt; 함수를 사용하였다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; DATEDIFF 와 차이는 1) 반환하는 단위를 지정 &quot;DAY&quot;, 2) 날짜 계산이 &lt;b&gt;&quot;날짜 인수2 - 날짜 인수1&quot;&lt;/b&gt;로 이루어짐&lt;/span&gt;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/113</guid>
      <comments>https://hwangbyeongho.tistory.com/113#entry113comment</comments>
      <pubDate>Tue, 8 Apr 2025 21:17:21 +0900</pubDate>
    </item>
    <item>
      <title>자동차 대여 기록에서 '대여중 / 대여 가능' 구분하기 | Lv.3 </title>
      <link>https://hwangbyeongho.tistory.com/112</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt; 문제&amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;CAR_RENTAL_COMPANY_RENTAL_HISTORY &lt;/b&gt;테이블에서 &lt;span style=&quot;color: #ef5369;&quot;&gt;2022년 10월 16일&lt;/span&gt;에 대여 중인 자동차인 경우 '대여중'이라고 표시하고, 대여 중이지 않은 자동차인 경우 '&lt;span style=&quot;color: #006dd7;&quot;&gt;대여 가능&lt;/span&gt;'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 &lt;b&gt;SQL문&lt;/b&gt;을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해 주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해 주세요.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이&lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;22년 10월 16일에 대여 중&lt;/b&gt;인 자동차인 경우가 어떤 경우일까?를 고려해서 &lt;b&gt;CASE문&lt;/b&gt;을 다음과 같이 활용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744030531123&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1번 쿼리
CASE
    WHEN start_date &amp;lt;= '2022-10-16' AND end_date &amp;gt;= '2022-10-16' THEN '대여중'
    ELSE '대여 가능'
END AS availability&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;다음 원본 데이터가 있다고 가정해 보자.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 67.7907%; height: 90px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;car_id&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;start_date&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;end_date&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-14&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-15&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-15&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-16&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이 경우에, 위 1번 쿼리가 동작하면 다음과 같은 결과가 반환될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 97.3238%; height: 51px;&quot; border=&quot;1&quot; data-ke-style=&quot;style3&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.2975%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;car_id&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.0585%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;start_date&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.026%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;end_date&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 59.2604%; text-align: center; height: 17px;&quot;&gt;&lt;span&gt;&lt;b&gt;availability&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.2975%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.0585%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-14&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.026%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-15&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 59.2604%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;대여 가능&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.2975%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.0585%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-15&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.026%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-16&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 59.2604%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;대여중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;하지만, 내가 원하는 결과는 car_id가 1인 자동차가 '대여중'으로 표시되는 것이다. &lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; 여기서 어떤 과정을 거쳐야 이 문제를 해결할 수 있을까❓&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️바로... 전에 공부했듯이 &lt;u&gt;&lt;b&gt;집계함수를 함께 활용해 주는 방법&lt;/b&gt;&lt;/u&gt;이 있다‼️&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744031257703&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 2번 쿼리
MAX(CASE
	WHEN start_date &amp;lt;= '2022-10-16' AND end_date &amp;gt;= '2022-10-16' THEN '대여중'
	ELSE '대여 가능'
    END
    ) AS availability&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MAX 함수가&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;문자열 데이터&lt;/span&gt;&lt;/b&gt;에서 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;동작하는 원리.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;각 car_id에 대해 &lt;b&gt;반환된 문자열 값 중 가장 큰 값을 선택&lt;/b&gt;한다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;- &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;문자열 비교 과정&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1. '대여 가능'의 '&lt;b&gt;대&lt;/b&gt;' vs '대여중'의 '&lt;b&gt;대&lt;/b&gt;' &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️ &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2. '대여 가능'의 '&lt;b&gt;여&lt;/b&gt;' vs '대여중'의 '&lt;b&gt;여&lt;/b&gt;' &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️ &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;=&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3. '대여 가능'의 '&lt;b&gt;가&lt;/b&gt;' vs '대여중'의 '&lt;b&gt;중&lt;/b&gt;' &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️ &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;lt; &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(각 문자의 ASCII 값을 기준으로 비교)&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;결론적으로, 이런 결과를 반환시킬 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 97.3238%; height: 51px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.2975%; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;car_id&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.0585%; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;start_date&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.026%; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;end_date&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 59.2604%; height: 17px;&quot;&gt;&lt;b&gt;availability&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.2975%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.0585%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-15&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.026%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2022-10-16&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 59.2604%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;대여중&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;최종 쿼리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744031808054&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT car_id
     , MAX(CASE 
                WHEN start_date &amp;lt;= '2022-10-16' AND end_date &amp;gt;= '2022-10-16' THEN '대여중'
                ELSE '대여 가능'
           END
          ) AS availability
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY car_id
ORDER BY car_id DESC&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hwangbyeongho.tistory.com/105&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hwangbyeongho.tistory.com/105&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744032078729&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;3421. Find Students Who Improved | Medium⭐&quot; data-og-description=&quot;문제&amp;nbsp;Write&amp;nbsp;a&amp;nbsp;solution&amp;nbsp;to&amp;nbsp;find&amp;nbsp;the&amp;nbsp;students&amp;nbsp;who&amp;nbsp;have&amp;nbsp;shown&amp;nbsp;improvement.&amp;nbsp;A&amp;nbsp;student&amp;nbsp;is&amp;nbsp;considered&amp;nbsp;to&amp;nbsp;have&amp;nbsp;shown&amp;nbsp;improvement&amp;nbsp;if&amp;nbsp;they&amp;nbsp;meet&amp;nbsp;both&amp;nbsp;of&amp;nbsp;these&amp;nbsp;conditions: Have taken exams in the same subject on at least two different dates&quot; data-og-host=&quot;hwangbyeongho.tistory.com&quot; data-og-source-url=&quot;https://hwangbyeongho.tistory.com/105&quot; data-og-url=&quot;https://hwangbyeongho.tistory.com/105&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FTRzg/hyYB7S7Iik/Ew5EVfkTUqnHKrcj9Qwlo1/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/Q3axv/hyYB94sHI9/1pO2OKJdMuraFsHqhZm7dk/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/cErzr5/hyYCeLtLUW/OF2yGRfRA4kJOJB5YFOkA0/img.png?width=545&amp;amp;height=959&amp;amp;face=0_0_545_959&quot;&gt;&lt;a href=&quot;https://hwangbyeongho.tistory.com/105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hwangbyeongho.tistory.com/105&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FTRzg/hyYB7S7Iik/Ew5EVfkTUqnHKrcj9Qwlo1/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/Q3axv/hyYB94sHI9/1pO2OKJdMuraFsHqhZm7dk/img.png?width=800&amp;amp;height=217&amp;amp;face=0_0_800_217,https://scrap.kakaocdn.net/dn/cErzr5/hyYCeLtLUW/OF2yGRfRA4kJOJB5YFOkA0/img.png?width=545&amp;amp;height=959&amp;amp;face=0_0_545_959');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;3421. Find Students Who Improved | Medium⭐&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제&amp;nbsp;Write&amp;nbsp;a&amp;nbsp;solution&amp;nbsp;to&amp;nbsp;find&amp;nbsp;the&amp;nbsp;students&amp;nbsp;who&amp;nbsp;have&amp;nbsp;shown&amp;nbsp;improvement.&amp;nbsp;A&amp;nbsp;student&amp;nbsp;is&amp;nbsp;considered&amp;nbsp;to&amp;nbsp;have&amp;nbsp;shown&amp;nbsp;improvement&amp;nbsp;if&amp;nbsp;they&amp;nbsp;meet&amp;nbsp;both&amp;nbsp;of&amp;nbsp;these&amp;nbsp;conditions: Have taken exams in the same subject on at least two different dates&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hwangbyeongho.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <category>Case</category>
      <category>MAX</category>
      <category>문자열</category>
      <category>프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/112</guid>
      <comments>https://hwangbyeongho.tistory.com/112#entry112comment</comments>
      <pubDate>Mon, 7 Apr 2025 22:17:42 +0900</pubDate>
    </item>
    <item>
      <title>대장균들의 자식의 수 구하기 | Lv.3</title>
      <link>https://hwangbyeongho.tistory.com/111</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대장균 개체의 ID와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해 주세요. 자식이 없다면 자식의 수는 0으로 출력하며, 개체의 ID에 대해 오름차순 정렬을 해 주세요.&amp;nbsp;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이(1)&lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;동일한 테이블을 조인(셀프 조인)하여 접근해 보자.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743838505688&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT e1.id
     , e2.parent_id
FROM ECOLI_DATA e1
    LEFT JOIN ECOLI_DATA e2 on e1.id= e2.parent_id&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아래와 같은 결과가 반환된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 16.2777%; height: 136px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;id&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;parent_id&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;NULL&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; NULL &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 7.6087%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.6008%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; NULL &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위 테이블에서 id를 기준으로 parent_id의 개수를 집계한다면 대장균 개체의 ID와 자식의 수를 집계 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743839075600&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT e1.id
     , COUNT(e2.parent_id) as CHILD_COUNT
FROM ECOLI_DATA e1
    LEFT JOIN ECOLI_DATA e2 on e1.id= e2.parent_id
GROUP BY id
ORDER BY id&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 16.2777%; height: 136px;&quot; border=&quot;1&quot; data-ke-style=&quot;style2&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;id&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;parent_id&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;COUNT() 함수 특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1. SELECT COUNT(*) FROM table_name&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️ &lt;b&gt;NULL 여부와 상관없이 테이블의 전체 행 수 반환&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2. SELECT COUNT(column_name) FROM table_name&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;➡️ &lt;b&gt;NULL이 아닌 값의 개수 반환, 없다면 자동으로 0 반환&lt;/b&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이(2)&lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;WITH문으로 임시 테이블을 생성해서 접근해 보지. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743839388957&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH child AS (
    SELECT parent_id
         , COUNT(*) AS child_count
    FROM ECOLI_DATA
    GROUP BY parent_id
)
SELECT e.id
     , IFNULL(c.child_count, 0) AS child_count
     -- , COALESCE(c.child_count, 0)
FROM ECOLI_DATA e
    LEFT JOIN child c ON e.id = c.parent_id
ORDER BY id&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; WITH&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;절 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;parent_id에 존재하는 id를 기준으로 개수를 집계한다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 23.1395%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;parent_id&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.4418%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;child_count&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.4418%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.4418%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.4418%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span&gt;&amp;nbsp;메인쿼리&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;원본 테이블의 id 열과 임시 테이블의 parent_id 열을 기준으로 조인하여, parent_id 값이 아닌 원본 테이블의 id 값들의 child_count 값이 NULL인 경우 0을 반환할 수 있도록 &lt;span style=&quot;color: #ef5369;&quot;&gt;IFNULL&lt;/span&gt; 또는 &lt;span style=&quot;color: #ef5369;&quot;&gt;COALESCE&lt;/span&gt; 함수를 사용한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/111</guid>
      <comments>https://hwangbyeongho.tistory.com/111#entry111comment</comments>
      <pubDate>Sat, 5 Apr 2025 16:58:05 +0900</pubDate>
    </item>
    <item>
      <title>대장균의 크기에 따라 분류하기 2 | Lv.3 | PERCENT_RANK() </title>
      <link>https://hwangbyeongho.tistory.com/110</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대장균 개체의 크기를 내림차순으로 정렬했을 때 &lt;span style=&quot;color: #ee2323;&quot;&gt;상위 0% ~ 25%&lt;/span&gt; 를 &lt;span style=&quot;color: #1b711d;&quot;&gt;'CRITICAL'&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;26% ~ 50%&lt;/span&gt; 를 &lt;span style=&quot;color: #1b711d;&quot;&gt;'HIGH'&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;51% ~ 75%&lt;/span&gt; 를 &lt;span style=&quot;color: #1b711d;&quot;&gt;'MEDIUM'&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;76% ~ 100%&lt;/span&gt; 를 &lt;span style=&quot;color: #1b711d;&quot;&gt;'LOW'라고&lt;/span&gt; 분류합니다. 대장균 개체의 ID(ID)와 분류된 이름(COLONY_NAME)을 출력하는 SQL 문을 작성해 주세요. 이때 결과는 개체의 ID에 대해 오름차순 정렬해 주세요. 단, &lt;span style=&quot;color: #ee2323;&quot;&gt;총 데이터의 수는 4의 배수&lt;/span&gt;이며 같은 사이즈의 대장균 개체가 서로 다른 이름으로 분류되는 경우는 없습니다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;  &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;내 생각&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;'같은 사이즈의 대장균 개체는 반드시 같은 이름으로 분류된다'&lt;/b&gt;는 조건이 있기 때문에, DENSE_RANK 함수는 정답으로 처리되지 않는다. &lt;u&gt;추가로 더 엄밀하게 생각해 보면, ROW_NUMBER 함수 또한 위 문제의 조건에 위배되는 경우가 존재하여 정답이 되서는 안 된다고 생각한다&lt;/u&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;총 데이터 수는 4의 배수라는 가정이 있기 때문에, 총 12개의 아래와 같은 데이터가 있다고 하자.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 94.5297%; height: 221px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SIZE_OF_COLONY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ROW_NUMBER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; RANK&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; height: 17px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ROW_NUMBER에 의한 분류&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;RANK에 의한 분류 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt;101&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt;CRITICAL&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt; CRITICAL &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt;101&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt; CRITICAL &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt; CRITICAL &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt;101&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt; CRITICAL &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt; CRITICAL &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt;101&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #ffffff; color: #ee2323;&quot;&gt;HIGH&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; background-color: #9feec3;&quot;&gt; CRITICAL &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;100&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; HIGH &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; HIGH &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;17&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; HIGH &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; HIGH &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;16&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;7&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;7&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;MEDIUM&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; MEDIUM &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;8&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;8&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; MEDIUM &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; MEDIUM &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;9&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;9&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; MEDIUM &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; MEDIUM &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;LOW&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; LOW &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;11&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;11&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; LOW &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; LOW &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.2565%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.2324%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;12&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.42937%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;12&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; LOW &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 27.2837%; text-align: center; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; LOW &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;u&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이와 같이 ROW_NUMBER에 의한 분류의 경우, 같은 사이즈임에도 불구하고 다른 이름으로 분류되는 경우가 생긴다!&lt;/span&gt;&lt;/u&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이(1)&lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대장균 개체의 크기를 특정 백분위로 구분하여 각각 COLONY_NAME으로 분류해야 하기 때문에 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;ROW_NUMBER()&lt;/b&gt;&lt;/span&gt;를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743682466885&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT id
     , CASE 
     	  WHEN row_n &amp;lt;= (SELECT COUNT(*) FROM ECOLI_DATA) * 1/4 THEN 'CRITICAL'
          WHEN row_n &amp;lt;= (SELECT COUNT(*) FROM ECOLI_DATA) * 2/4 THEN 'HIGH'
          WHEN row_n &amp;lt;= (SELECT COUNT(*) FROM ECOLI_DATA) * 3/4 THEN 'MEDIUM'
          ELSE 'LOW'
       END AS colony_name
FROM (
    SELECT *
         , ROW_NUMBER() OVER (ORDER BY size_of_colony DESC) AS row_n
         -- , RANK() OVER (ORDER BY size_of_colony DESC) AS rK
    FROM ECOLI_DATA    
  ) AS step1
ORDER BY id&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;✅ &lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;FROM절 서브쿼리 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대장균 개체 크기 기준 내림차순 정렬한 뒤, 크기가 같아도 중복되지 않게끔 순위를 부여한 테이블&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;메인쿼리 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;총 데이터의 수가 4의 배수라는 조건이 있기 때문에, CASE 구문을 활용하여 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;상위 0~25%, 26~50%, 51~75%, 76~100%&lt;/b&gt;&lt;/span&gt;에 해당되는지 조건을 형성한다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;혹시나&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;상위 0~25%에 해당하는 row는 첫번째 WHEN 조건에서 걸러지기 때문에, 그 이후에 등장하는 WHEN 조건에 포함되지 않는 CASE 구문 동작 원리를 알아두자.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;풀이(2)&lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;윈도우 함수 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;PERCENT_RANK()&lt;/b&gt;&lt;/span&gt;를 사용하여 접근해 보자. 이 함수는 데이터 집합 내에서 &lt;b&gt;특정 행의 상대적 순위를 백분율로 계산하여 반환&lt;/b&gt;하는 윈도우 함수이다. &lt;b&gt;0~1 값을 반환&lt;/b&gt;하며, 특정 값이 전체 데이터에서 차지하는 위치를 확인할 때 유용하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743683732421&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT id
     , CASE 
     	  WHEN pct_rk &amp;lt;= 0.25 THEN 'CRITICAL'
          WHEN pct_rk &amp;lt;= 0.5 THEN 'HIGH'
          WHEN pct_rk &amp;lt;= 0.75 THEN 'MEDIUM'
          ELSE 'LOW'
       END AS colony_name
FROM (
    SELECT *
         , PERCENT_RANK() OVER (ORDER BY size_of_colony DESC) AS pct_rk
    FROM ECOLI_DATA
  ) AS step1
ORDER BY id&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;FROM절 서브쿼리 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대장균 개체 크기 기준 내림차순 정렬한 뒤, 각 행의 상대적 순위를 백분율로 계산한 테이블&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mN1ft/btsM6GVhwjb/n40iU40K1MI0qyh5whT6RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mN1ft/btsM6GVhwjb/n40iU40K1MI0qyh5whT6RK/img.png&quot; data-alt=&quot;PERCENT_RANK() 적용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mN1ft/btsM6GVhwjb/n40iU40K1MI0qyh5whT6RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmN1ft%2FbtsM6GVhwjb%2Fn40iU40K1MI0qyh5whT6RK%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;529&quot; height=&quot;192&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PERCENT_RANK() 적용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;메인쿼리 :&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;총 데이터의&lt;span&gt;&amp;nbsp;&lt;/span&gt;수가 4의 배수라는 조건이 있기 때문에, CASE 구문을 활용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;상위 0~25%, 26~50%, 51~75%, 76~100%&lt;/b&gt;&lt;/span&gt;에 해당되는지 조건을 형성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt; &lt;b&gt;PERCENT_RANK() 함수 특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 0 ~ 1 사이의 값을 반환한다. (0이 가장 낮은 순위, 1이 가장 높은 순위를 의미)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 계산 공식 :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PERCENT_RANK = (RANK - 1) / (Total Rows - 1)&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. 첫 번째 행은 항상 0을 반환&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 중복 값인 경우 동일한 값을 반환&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;쉽게 이해하기&lt;br /&gt;RANK() 함수 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;동작 원리&lt;/b&gt;에 따라 1, 1, 3, 4, ...와 같이 순위를 부여한 후에&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;, 위 계산 공식&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;과 같이 계산되는 동작 원리&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;‼️&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8uJJ2/btsM8usxRyW/XkxlFtw3ylLwavL59Q3SW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8uJJ2/btsM8usxRyW/XkxlFtw3ylLwavL59Q3SW0/img.png&quot; data-alt=&quot;동작 원리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8uJJ2/btsM8usxRyW/XkxlFtw3ylLwavL59Q3SW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8uJJ2%2FbtsM8usxRyW%2FXkxlFtw3ylLwavL59Q3SW0%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;813&quot; height=&quot;227&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동작 원리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.mysqltutorial.org/mysql-window-functions/mysql-percent_rank-function/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고자료&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <category>SQL/프로그래머스</category>
      <category>PERCENT_RANK</category>
      <category>rank</category>
      <category>row_number</category>
      <category>프로그래머스</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/110</guid>
      <comments>https://hwangbyeongho.tistory.com/110#entry110comment</comments>
      <pubDate>Thu, 3 Apr 2025 21:48:35 +0900</pubDate>
    </item>
    <item>
      <title>3220. Odd and Even Transactions | Medium</title>
      <link>https://hwangbyeongho.tistory.com/109</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Write&amp;nbsp;a&amp;nbsp;solution&amp;nbsp;&lt;u&gt;&lt;b&gt;to&amp;nbsp;find&amp;nbsp;the&amp;nbsp;sum&amp;nbsp;of&amp;nbsp;amounts&amp;nbsp;for&amp;nbsp;odd&amp;nbsp;and&amp;nbsp;even&amp;nbsp;transactions&amp;nbsp;for&amp;nbsp;each&amp;nbsp;day&lt;/b&gt;&lt;/u&gt;.&amp;nbsp;If&amp;nbsp;there&amp;nbsp;are&amp;nbsp;no&amp;nbsp;odd&amp;nbsp;or&amp;nbsp;even&amp;nbsp;transactions&amp;nbsp;for&amp;nbsp;a&amp;nbsp;specific&amp;nbsp;date,&amp;nbsp;display&amp;nbsp;as&amp;nbsp;0. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Return&amp;nbsp;the&amp;nbsp;result&amp;nbsp;table&amp;nbsp;ordered&amp;nbsp;by&amp;nbsp;&lt;b&gt;transaction_date&amp;nbsp;in&amp;nbsp;&lt;u&gt;ascending&amp;nbsp;order&lt;/u&gt;&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm3Z6Y/btsM1J5AC8F/JC1nel79ScYevGcnmKbKa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm3Z6Y/btsM1J5AC8F/JC1nel79ScYevGcnmKbKa0/img.png&quot; data-alt=&quot;테이블 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm3Z6Y/btsM1J5AC8F/JC1nel79ScYevGcnmKbKa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm3Z6Y%2FbtsM1J5AC8F%2FJC1nel79ScYevGcnmKbKa0%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;226&quot; height=&quot;155&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테이블 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RkIfU/btsM149W8Ty/VhFyxIOUSfKN3HfFXzn7ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RkIfU/btsM149W8Ty/VhFyxIOUSfKN3HfFXzn7ak/img.png&quot; data-alt=&quot;결과 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RkIfU/btsM149W8Ty/VhFyxIOUSfKN3HfFXzn7ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRkIfU%2FbtsM149W8Ty%2FVhFyxIOUSfKN3HfFXzn7ak%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;285&quot; height=&quot;352&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과 예시&lt;/figcaption&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각 일자별로 amount 값이 &lt;span style=&quot;color: #ef6f53;&quot;&gt;홀수&lt;/span&gt;인 경우의 합, &lt;span style=&quot;color: #1a5490;&quot;&gt;짝수&lt;/span&gt;인 경우의 합을 집계하는 문제&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Solution&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1743425977839&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT transaction_date
     , IFNULL(SUM(CASE WHEN MOD(amount, 2) != 0 THEN amount END), 0) AS odd_sum
     , IFNULL(SUM(CASE WHEN MOD(amount, 2) = 0 THEN amount END), 0) AS even_sum 
FROM transactions
GROUP BY transaction_date
ORDER BY transaction_date&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;✅ &lt;b&gt;CASE WHEN 구문 :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;amount 값을 2로 나누었을 때의 나머지 값에 따라 홀/짝수를 판별하는 로직을 설계한다. &lt;b&gt;MOD(나누어지는 값, 나누는 값)&lt;/b&gt; 함수를 활용한다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;✅ &lt;b&gt;SUM :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;홀수인 amount 값의 합과 짝수인 amount 값의 합을 집계하기 위해 SUM 함수를 활용한다.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;✅ &lt;b&gt;IFNULL :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SUM 함수로 집계된 결괏값이 Null인 경우 0을 반환할 수 있도록 한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>SQL/leetcode</category>
      <category>ifnull</category>
      <category>leetcode</category>
      <category>MOD</category>
      <category>리트코드</category>
      <author>딱한아이</author>
      <guid isPermaLink="true">https://hwangbyeongho.tistory.com/109</guid>
      <comments>https://hwangbyeongho.tistory.com/109#entry109comment</comments>
      <pubDate>Mon, 31 Mar 2025 22:05:01 +0900</pubDate>
    </item>
  </channel>
</rss>