MySQL에서 행을 열로 변환

Preet Sanghavi 2023년6월20일
  1. MySQL에서 데이터 세트 생성
  2. CASE 문을 사용하여 MySQL에서 행을 열로 변환
  3. IF 문을 사용하여 MySQL에서 행을 열로 변환
MySQL에서 행을 열로 변환

이 자습서에서는 MySQL에서 특정 테이블의 행을 열로 변경하는 방법을 배웁니다.

MySQL에서 데이터 세트 생성

열로 표시된 필요한 행 데이터와 연결된 적절한 정보를 얻는 것이 자주 요구됩니다. 이 작업을 수행하는 방법을 이해합시다.

그러나 시작하기 전에 작업할 더미 데이터 세트를 생성합니다. 여기에서 몇 개의 행과 함께 student_details 테이블을 생성합니다.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName)
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

위의 쿼리는 학생의 이름과 성이 있는 테이블과 행을 만듭니다. 데이터의 항목을 보려면 다음 코드를 사용합니다.

SELECT * FROM student_details;

위의 코드는 다음과 같은 결과를 제공합니다.

stu_id  stu_firstName   stu_lastName
1         Preet         Sanghavi
2         Rich          John
3         Veron         Brow
4         Geo           Jos
5         Hash          Shah
6         Sachin        Parker
7         David         Miller

CASE 문을 사용하여 MySQL에서 행을 열로 변환

CASE 기술의 기본 구문은 다음과 같이 설명할 수 있습니다.

SELECT
column_name
    SUM(CASE WHEN stu_firstName = "Preet" THEN 1 ELSE 0 END) AS Preet_Present
   FROM
    table_name
    GROUP BY
column_name;

이제 Preet, Rich, Veron이라는 이름을 가진 학생이 수업에 있는지 확인하겠습니다. 또한 위에서 언급한 기술을 사용하여 행이 열로 변환되도록 결과를 표시하려고 합니다.

이 작업은 다음 쿼리를 사용하여 수행할 수 있습니다.

SELECT
stu_firstName,
    SUM(CASE WHEN stu_firstName = "Preet" THEN 1 ELSE 0 END) AS Preet_Present,
    SUM(CASE WHEN stu_firstName = "Rich" THEN 1 ELSE 0 END) AS Rich_Present,
    SUM(CASE WHEN stu_firstName = "Veron" THEN 1 ELSE 0 END) AS Veron_Present
   FROM
    student_details
    GROUP BY
stu_firstName;

위의 쿼리에서 볼 수 있듯이 행을 Preet_present, Rich_presentVeron_present로 열로 변환하는 것을 목표로 합니다. 위에서 언급한 쿼리의 출력은 다음과 같습니다.

SELECT DISTINCT
    COUNT(DISTINCT IF(stu_firstName like '%reet',
            stu_id,
            NULL)) AS count_student_ids
FROM student_details;

위의 코드는 stu_firstNameIF 절에서 reet로 끝나는 경우 student_details 테이블에서 고유한 stu_id의 수를 계산합니다. 위 코드의 출력은 다음과 같습니다.

stu_firstName   Preet_Present   Rich_Present Veron_Present
Preet           1                   0           0
Rich            0                   1           0
Veron           0                   0           1
Geo             0                   0           0
Hash            0                   0           0
Sachin          0                   0           0
David           0                   0           0

참고: 위의 코드는 AS 키워드와 함께 Preet_Present, Rich_PresentVeron_Present라는 별칭을 사용했습니다.

CASE 기술의 대안은 비슷한 결과를 얻는 데 도움이 되는 IF 기술입니다.

IF 문을 사용하여 MySQL에서 행을 열로 변환

IF 문은 특정 조건 또는 MySQL의 조건 세트를 기반으로 데이터를 필터링합니다. IF 문을 사용하여 MySQL에서 행을 열로 변환하는 기본 구문은 다음과 같이 설명할 수 있습니다.

SELECT
column_name,
    SUM(IF(column_name= "something", do_this, else_do_this)) AS Preet_Present
   FROM
    table_name
    GROUP BY
column_name;

위의 쿼리에서 볼 수 있듯이 IF 조건이 True를 반환할 때 do_this 작업을 수행했습니다. IF 조건이 False를 반환하면 else_do_this 작업을 수행합니다.

student_details 테이블에 대해 아래 쿼리를 사용하여 원하는 결과를 얻을 수 있습니다.

SELECT
stu_firstName,
    SUM(IF(stu_firstName = "Preet", 1, 0)) AS Preet_Present,
    SUM(IF(stu_firstName = "Rich",1,0)) AS Rich_Present,
    SUM(IF(stu_firstName = "Veron", 1,0)) AS Veron_Present
   FROM
    student_details
    GROUP BY
stu_firstName;

위 쿼리의 출력은 다음과 같이 설명할 수 있습니다.

stu_firstName   Preet_Present   Rich_Present Veron_Present
Preet           1                   0           0
Rich            0                   1           0
Veron           0                   0           1
Geo             0                   0           0
Hash            0                   0           0
Sachin          0                   0           0
David           0                   0           0

따라서 CASEIF 문을 사용하여 MySQL에서 행을 열로 효율적으로 변환할 수 있습니다.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

관련 문장 - MySQL Row

관련 문장 - MySQL Column