>데이터 베이스 >MySQL 튜토리얼 >SQLite에서 학생 표시 데이터를 긴 형식에서 넓은 형식으로 전환하는 방법은 무엇입니까?

SQLite에서 학생 표시 데이터를 긴 형식에서 넓은 형식으로 전환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-10 12:46:42324검색

How to Pivot Student Marks Data from Long to Wide Format in SQLite?

SQLite의 피벗 테이블 구조

소개:

긴 형식이라고도 알려진 데이터 병합은 SQLite에 데이터를 저장하는 일반적인 방법입니다. 그러나 때로는 이 데이터를 넓은 형식으로 변환해야 할 때도 있습니다. 여기서 각 행은 과목을 나타내고 열은 특정 학생의 해당 과목 점수를 나타냅니다. 이 과정을 관점이라고 합니다.

문제 설명:

두 개의 테이블이 있습니다. 하나는 학생 데이터(학생, 이름)를 저장하는 테이블이고 다른 하나는 다양한 과목(학생, 과목 ID, 점수)의 점수를 저장하는 테이블입니다. 이 작업은 각 행이 학생을 나타내고 열이 특정 과목의 점수를 나타내는 넓은 형식으로 학생 정보를 검색하는 것입니다.

CASE 및 GROUP BY를 사용한 솔루션:

<code class="language-sql">SELECT
    si.studid,
    si.name,
    SUM(CASE WHEN md.subjectid = 3 THEN md.marks END) AS subjectid_3,
    SUM(CASE WHEN md.subjectid = 4 THEN md.marks END) AS subjectid_4,
    SUM(CASE WHEN md.subjectid = 5 THEN md.marks END) AS subjectid_5
FROM
    student_info si
JOIN
    markdetails md ON md.studid = si.studid
GROUP BY
    si.studid, si.name;</code>

이 솔루션은 SUM() 집계 함수에 CASE 문을 사용합니다. 각 subjectid(3, 4, 5)에 대해 markdetails 테이블에 일치하는 행이 포함되어 있는지 확인하고 해당 점수를 합산합니다. GROUP BY 절을 사용하면 결과가 학생 ID 및 이름별로 그룹화됩니다.

왼쪽 외부 조인을 사용하는 대체 솔루션:

<code class="language-sql">SELECT
    u.stuid,
    u.name,
    s3.marks AS subjectid_3,
    s4.marks AS subjectid_4,
    s5.marks AS subjectid_5
FROM
    student_info u
LEFT OUTER JOIN
    markdetails s3 ON u.stuid = s3.stuid AND s3.subjectid = 3
LEFT OUTER JOIN
    markdetails s4 ON u.stuid = s4.stuid AND s4.subjectid = 4
LEFT OUTER JOIN
    markdetails s5 ON u.stuid = s5.stuid AND s5.subjectid = 5;</code>

이 대체 솔루션은 LEFT OUTER JOIN을 사용하여 학생들을 markdetails 테이블의 해당 점수와 일치시킵니다. 특정 과목에 대한 점수가 없는 학생의 경우 점수 열(subjectid_3, subjectid_4, subjectid_5)이 NULL로 반환됩니다.

위 내용은 SQLite에서 학생 표시 데이터를 긴 형식에서 넓은 형식으로 전환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.