MySQL에서 CASE 문 사용 최적화
<p>안녕하세요 여러분</p>
<p>위 스크린샷과 같은 테이블이 있습니다. 필요한 추가 열을 반환하도록 <code>CASE</code> 문을 사용하여 쿼리를 작성했습니다. 제가 작성한 쿼리는 다음과 같습니다. </p>
<pre class="brush:php;toolbar:false;">SELECT
*,
CASE WHEN (SUM(CASE WHEN 클래스 = '클래스 1' THEN 1 END) OVER(PARTITION BY 학생_ID)) >= 1 THEN 1 ELSE 0 END AS '클래스 1',
CASE WHEN (SUM(CASE WHEN 클래스 = '클래스 2' THEN 1 END) OVER(PARTITION BY 학생_ID)) >= 1 THEN 1 ELSE 0 END AS '클래스 2',
CASE WHEN (SUM(CASE WHEN 클래스 = '클래스 3' THEN 1 END) OVER(PARTITION BY 학생_ID)) >= 1 THEN 1 ELSE 0 END AS '클래스 3',
CASE WHEN (SUM(CASE WHEN 클래스 = '클래스 4' THEN 1 END) OVER(PARTITION BY 학생_ID)) >= 1 THEN 1 ELSE 0 END AS '클래스 4'
qa;</pre>
<p>다음은 제가 얻은 결과 표입니다.</p>
<p>이 쿼리에서 제가 원하는 것은 학생이 강좌에 참석한 경우 해당 학생에게 속한 모든 행에 대해 클래스 열 아래에 <code>1</code>을 표시하는 것입니다. </p>
<p>예를 들어, <code>student_id</code> <code>2</code> ;/code> 열 아래에서 <code>student_id</code>에 대한 두 행은 <code> </p>
<p>쿼리에서 원하는 결과를 얻었지만 이제 <code>1</code>를 사용하는 대신 클래스의 <code>enrollment_date</code>를 사용하고 싶습니다. 제가 원하는 최종 결과는 다음과 같습니다. </p>
<p>위 스크린샷의 최종 출력을 얻으려면 쿼리를 어떻게 수정해야 하는지 알 수 있나요? </p>
<p><strong>두 번째 질문:</strong></p>
<p>위 쿼리에서 볼 수 있듯이 각 클래스에는 해당 클래스에 대한 열을 생성하는 별도의 <code>CASE</code> 문이 있습니다. 그러나 앞으로는 5,6,7,... 클래스가 있을 수 있으므로 다른 새 클래스가 있을 때마다 <code>CASE</code> 문을 다시 추가해야 합니다.어쨌든 4개의 다른 클래스에 대해 4개의 <code>CASE</code> 문을 가질 필요가 없도록 쿼리를 최적화할 수 있지만 여전히 다른 클래스에 대한 열을 만들 수 있습니다(새 클래스가 있는 경우). , 새로운 열이 있을 것입니다) 클래스도 있습니다)? </p>
샘플 데이터
<pre class="brush:php;toolbar:false;">테이블 qa(
학생_ID INT,
클래스 varchar(20),
수업_종료_날짜 날짜,
등록_날짜 날짜
);
qa에 삽입(학생_ID, 수업, 수업_종료일, 등록_날짜)
가치
(1, '클래스 1', '2022-03-03', '2022-02-14'),
(1, '클래스 3', '2022-06-13', '2022-04-12'),
(1, '클래스 4', '2022-07-03', '2022-06-19'),
(2, '클래스 1', '2023-03-03', '2022-07-14'),
(2, '클래스 2', '2022-08-03', '2022-07-17'),
(4, '클래스 4', '2023-03-03', '2022-012-14'),
(4, '클래스 2', '2022-04-03', '2022-03-21')
;</pre></p>