sql >> データベース >  >> RDS >> Mysql

MySQLでGroupBy句を使用して行をグループ化する

    このチュートリアルは、MySQLを使用した基本的なSQLクエリの学習シリーズの一部です。このチュートリアルでは、集計関数でGROUP BY句を使用して、MySQLでテーブル行のグループ化を実行するSQLクエリについて説明します。 MySQLで集計関数(SUM、AVG、MAX、MIN、COUNT、DISTINCT)を使用して、集計関数を学習することもできます。

    GroupByクエリ

    GROUP BY 句を使用して、テーブル行のグループ化を実行できます。また、集計関数とともに使用して、レポートを生成したり、統計データを収集したりすることもできます。

    # GROUP BY - Syntax
    SELECT column_1, column_2, ..., [<aggregate function> AS <column>] FROM `table_name` GROUP BY column_1, column_2, ...;

    クエリの説明

    GROUP BY 句を使用して、行のセットを形成する列を指定することにより、行をグループ化できます。

    集計関数を使用して、GROUP BY句を効果的に使用してレポートを生成し、統計データを収集できます。

    グループ化は複数の列に適用でき、最初の列がプライマリグループを形成し、後続の列がサブグループを形成します。

    このセクションでは、集計関数を使用する場合と使用しない場合のGROUPBY句を使用してグループ化を実行する例を示します。下記のクエリを使用して、ID、名、姓、年齢、およびユーザーデータを格納するアクティブな列を持つユーザーテーブルを作成します。

    # Create the User Table
    CREATE TABLE `enterprise`.`user` (
    `user_id` BIGINT NOT NULL,
    `first_name` VARCHAR(45) ,
    `last_name` VARCHAR(45),
    `age` SMALLINT(6) NOT NULL DEFAULT 0,
    `active` TINYINT(1) NOT NULL DEFAULT 0,
    PRIMARY KEY (`user_id`));

    下記のクエリを使用して、ユーザーテーブルにテストデータを挿入できます。

    # Insert Rows - All Columns
    INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `age`, `active` ) VALUES
    ( 1, 'John', 'Smith', 18, 1 ),
    ( 2, 'Rick', 'Jones', 19, 1 ),
    ( 3, 'John', 'Ponting', 16, 0 ),
    ( 4, 'Harsh', 'Upadhyay', 20, 1 ),
    ( 5, 'Tajwinder', 'Singh', 18, 0 );

    上記のクエリは、5つの異なるユーザーを表すために、ID、名、姓、およびアクティブな列を持つ5つの行をテーブルに挿入します。

    次に、集計関数を使用せずにGROUP BY句を使用して、行をグループ化します。以下に示すように、MySQLのGROUPBY句を使用して実行できます。

    # GROUP BY - Generate the set of active values
    SELECT active from user GROUP BY active;

    # Result
    1
    0

    # GROUP BY - Generate the set of first name
    SELECT first_name from user GROUP BY first_name;

    # Result
    John
    Rick
    Harsh
    Tajwinder

    上記のクエリは、GROUPBY句を使用して行をグループ化することで結果セットを返しました。次に、以下に示すように、集計関数を使用して行をグループ化します。

    # GROUP BY - Get the maximum age of all users with specific first name
    SELECT first_name, MAX(age) AS max_age from user GROUP BY first_name;

    # Result
    John 18
    Rick 19
    Harsh 20
    Tajwinder 18

    # GROUP BY - Get the average age of all users with specific first name
    SELECT first_name, AVG(age) AS avg_age from user GROUP BY first_name;

    # Result
    John 17.0000
    Rick 19.0000
    Harsh 20.0000
    Tajwinder 18.0000
    >

    これは、集計関数の有無にかかわらずGROUP BY句を使用して、特定の列のテーブルの行をグループ化する方法です。


    1. Postgresql9.2pg_dumpバージョンの不一致

    2. Oracleデータ型:VARCHAR2またはCHARを使用する必要があります

    3. MySQLのタイプ:BigInt(20)とInt(20)

    4. MySQLデータベースの問題をトラブルシューティングする方法