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;

では、クラスにPreetRichVeronという名前の生徒がいるかどうかを確認してみましょう。 さらに、上記の手法を使用して行が列に変換されるように結果を表示しようとします。

この操作は、次のクエリを使用して実行できます。

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_presentRich_present、および Veron_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

注: 上記のコードでは、エイリアス Preet_PresentRich_PresentVeron_PresentAS キーワードと共に使用しています。

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 で効率的に行を列に変換できます。

著者: Preet Sanghavi
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