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_present
및 Veron_present
로 열로 변환하는 것을 목표로 합니다. 위에서 언급한 쿼리의 출력은 다음과 같습니다.
SELECT DISTINCT
COUNT(DISTINCT IF(stu_firstName like '%reet',
stu_id,
NULL)) AS count_student_ids
FROM student_details;
위의 코드는 stu_firstName
이 IF
절에서 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_Present
및Veron_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
따라서 CASE
및 IF
문을 사용하여 MySQL에서 행을 열로 효율적으로 변환할 수 있습니다.