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

MySQLで列のパーセンテージを計算する方法

    列の合計値の何パーセントが各行(国、州など)からのものであるかを理解するために、データ内の列のパーセンテージ(売上、収益など)を計算する必要がある場合があります。この値を計算するためのすぐに使用できる関数がないため、SQLクエリを作成する必要があります。 MySQLで列のパーセンテージを計算する方法は次のとおりです

    MySQLで列のパーセンテージを計算する方法

    以下に示すような次の表があるとします。

    mysql> create table sales(rep varchar(255),sale int);
    
    mysql> insert into sales values('Bob',15),('Sally',30),('Peter',15);
    
    mysql> select * from sales;
    +-------+------+
    |  rep  | sale |
    +-------+------+
    |  Bob  |  15  |
    | Sally |  30  |
    | Peter |  15  |
    +-------+------+
    
    

    単に合計販売のパーセントである「合計のパーセント」列を表示するとします。 以下に示すように、列。

    +-------+------+------------------+
    |  rep  | sale | percent of total |
    +-------+------+------------------+
    |  Bob  |  15  |        25        |
    | Sally |  30  |        50        |
    | Peter |  15  |        25        |
    +-------+------+------------------+
    

    これは、1つのクエリを使用して複数の方法で実行できます。合計とパーセンテージを計算するために個別のクエリを作成する必要はありません。それぞれを見てみましょう

    ボーナスリード:MySQLで2つの列のパーセンテージを計算する方法

    CROSSJOINを使用してMySQLの列のパーセンテージを計算する方法

    MySQLで列のパーセンテージを計算するには、 sum()をクロス結合するだけです。 販売 元のテーブルの列。

    SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total`
    FROM sales
    CROSS JOIN (SELECT SUM(sale) AS s FROM sales) t;
    
    +-------+------+------------------+
    |  rep  | sale | percent of total |
    +-------+------+------------------+
    |  Bob  |  15  |        25        |
    | Sally |  30  |        50        |
    | Peter |  15  |        25        |
    +-------+------+------------------+
    

    データをフィルタリングするためにwhere句を追加する場合は、以下に示すように、CROSSJOINの後に配置する必要があります。そうしないと、エラーが発生します。

    SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total`
    FROM sales
    CROSS JOIN (SELECT SUM(sale) AS s FROM sales) t where Rep='Bob';
    +------+------+------------------+
    | Rep  | Sale | percent of total |
    +------+------+------------------+
    | Bob  |  15  |       25         |
    +------+------+------------------+
    

    ただし、列の合計中にwhere句を追加する場合は、次に示すように、totalのselect句に追加する必要があります。たとえば、ボブを合計から除外したい場合は、それを行うためのクエリを次に示します。

    SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total` 
    FROM sales 
    CROSS JOIN (SELECT SUM(sale) AS s FROM sales where Rep<>'Bob') t 
    where Rep<>'Bob';
    +-------+------+------------------+
    |  Rep  | Sale | percent of total |
    +-------+------+------------------+
    | Sally |  30  |      66.6667     |
    | Peter |  15  |      33.3333     |
    +-------+------+------------------+
    

    ボーナスリード:MySQLで週ごとの成長率を計算する方法

    SUBSELECT/SUBQUERYを使用してMySQLの列のパーセンテージを計算する方法

    以下に示すように、JOINを使用する代わりに、副選択を使用して列のパーセンテージを計算することもできます。

    SELECT Rep, Sale, 
    Sale * 100 / (SELECT SUM(sale) AS s FROM sales) AS `percent of total`
    FROM sales;
    
    +-------+------+------------------+
    |  rep  | sale | percent of total |
    +-------+------+------------------+
    |  Bob  |  15  |        25        |
    | Sally |  30  |        50        |
    | Peter |  15  |        25        |
    +-------+------+------------------+
    

    データをフィルタリングするためにwhere句を追加する場合は、以下に示すように、CROSSJOINの後に配置する必要があります。そうしないと、エラーが発生します。

    SELECT Rep, Sale, 
    Sale * 100 / (SELECT SUM(sale) AS s FROM sales) AS `percent of total` 
    FROM sales
    where Rep='Bob';
    +--------+--------+-------------------+
    |   Rep  |  Sale  |  percent of total |
    +--------+--------+-------------------+
    |  Bob   |    15  |         25        |
    +--------+--------+-------------------+
    

    ただし、列の合計中にwhere句を追加する場合は、totalのselect句に追加する必要があります。たとえば、ボブを合計から除外したい場合は、それを行うためのクエリを次に示します。

    SELECT Rep, Sale, 
    Sale * 100 / (SELECT SUM(sale) AS s FROM sales where Rep='Bob') AS `percent of total` 
    FROM sales
    where Rep='Bob';
    +-------+------+------------------+
    |  Rep  | Sale | percent of total |
    +-------+------+------------------+
    | Sally |  30  |      66.6667     |
    | Peter |  15  |      33.3333     |
    +-------+------+------------------+

    MySQLの列のパーセンテージを計算するための要件に従って、上記のクエリをカスタマイズできます。

    さらに、レポートツールを使用して、データを円グラフまたはダッシュボードにプロットできます。これは、Ubiqを使用して作成された円グラフの例です。

    MySQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。

    1. 1つのSQLクエリでOracle11gがより多くのCPUを消費するように強制できないのはなぜですか

    2. postgresql用にHikariCPを設定するにはどうすればよいですか?

    3. OracleUNIONおよびORDERBYに関する奇妙な問題

    4. SQLServerのピークパフォーマンスを確保するための5つの秘訣