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
注: 上記のコードでは、エイリアス
Preet_Present
、Rich_Present
、Veron_Present
をAS
キーワードと共に使用しています。
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 で効率的に行を列に変換できます。