MySQL에서 CASE 문 사용 최적화
P粉463840170
P粉463840170 2023-09-04 18:42:48
0
2
505

안녕하세요 여러분

위 스크린샷과 같은 테이블이 있습니다. 필요한 추가 열을 반환하도록 CASE 문을 사용하여 쿼리를 작성했습니다. 제가 작성한 쿼리는 다음과 같습니다.

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;

다음은 제가 얻은 결과 표입니다.

이 쿼리에서 제가 원하는 것은 학생이 강좌에 참석한 경우 해당 학생에게 속한 모든 행에 대해 클래스 열 아래에 1을 표시하는 것입니다.

예를 들어, student_id 2 ;/code> 열 아래에서 student_id에 대한 두 행은

쿼리에서 원하는 결과를 얻었지만 이제 1를 사용하는 대신 클래스의 enrollment_date를 사용하고 싶습니다. 제가 원하는 최종 결과는 다음과 같습니다.

위 스크린샷의 최종 출력을 얻으려면 쿼리를 어떻게 수정해야 하는지 알 수 있나요?

두 번째 질문:

위 쿼리에서 볼 수 있듯이 각 클래스에는 해당 클래스에 대한 열을 생성하는 별도의 CASE 문이 있습니다. 그러나 앞으로는 5,6,7,... 클래스가 있을 수 있으므로 다른 새 클래스가 있을 때마다 CASE 문을 다시 추가해야 합니다.어쨌든 4개의 다른 클래스에 대해 4개의 CASE 문을 가질 필요가 없도록 쿼리를 최적화할 수 있지만 여전히 다른 클래스에 대한 열을 만들 수 있습니다(새 클래스가 있는 경우). , 새로운 열이 있을 것입니다) 클래스도 있습니다)?

샘플 데이터

테이블 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') ;

P粉463840170
P粉463840170

모든 응답 (2)
P粉670107661

테이블 정의 및 데이터를 기반으로 쿼리를 생성하고 [선택적으로] 실행하는 저장 프로시저에 대해서는Pivot을 참조하세요.

    P粉785522400

    수업종료일과 등록일을 모두 포함하는 예시입니다 -

    으아악
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!