列の合計値の何パーセントが各行(国、州など)からのものであるかを理解するために、データ内の列のパーセンテージ(売上、収益など)を計算する必要がある場合があります。この値を計算するためのすぐに使用できる関数がないため、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日間の無料トライアルを提供しています。