MySQL でパーセンテージを計算する

Mehvish Ashiq 2023年6月20日
  1. 1つの列を使用して MySQL でパーセンテージを計算する
  2. 2つの列を使用して MySQL でパーセンテージを計算する
  3. OVER() 関数を使用して MySQL でパーセンテージを計算する
MySQL でパーセンテージを計算する

1つまたは複数の列を使用して、MySQL でパーセンテージを計算します。 それにはさまざまな方法があり、すべてのアプローチでサンプル テーブルを使用します。

1つの列を使用して MySQL でパーセンテージを計算する

sales という名前のテーブルがあり、IDRepresentativeName、および Sale は列名です。 次のクエリを使用して sales テーブルを作成および設定し、このチュートリアルで練習することができます。

コード例:

# create a table
CREATE TABLE sales (
  ID INT NOT NULL,
  RepresentativeName VARCHAR(45) NOT NULL,
  Sale INT NOT NULL,
  PRIMARY KEY (ID));

# insert data
INSERT INTO sales (ID, RepresentativeName, Sale) VALUES
(1, 'John', 15),
(2, 'Mehvish', 15),
(3, 'Saira', 30);

# display sales table data
SELECT * FROM sales;

出力:

+----+--------------------+------+
| ID | RepresentativeName | Sale |
+----+--------------------+------+
|  1 | John               |   15 |
|  2 | Mehvish            |   15 |
|  3 | Saira              |   30 |
+----+--------------------+------+
3 rows in set (0.00 sec)

Sale フィールドのパーセンテージを見つけるには、元のリレーション (テーブル) を使用して Sale 属性の SUM() 関数を CROSS JOIN できます。 これを行うには、次のクエリを参照してください。

コード例:

SELECT RepresentativeName, Sale,
round(((Sale * 100) / temp.SalesSum),2) AS Percentage
FROM sales
CROSS JOIN (SELECT SUM(Sale) AS SalesSum FROM sales) temp;

出力:

+--------------------+------+------------+
| RepresentativeName | Sale | Percentage |
+--------------------+------+------------+
| John               |   15 |      25.00 |
| Mehvish            |   15 |      25.00 |
| Saira              |   30 |      50.00 |
+--------------------+------+------------+
3 rows in set (0.00 sec)

ここでは、round() メソッドを使用して、小数点以下 2 桁の結果を取得します。 パーセンテージの検索に使用されるクエリに注目すると、CROSS JOIN キーワードの後にサブクエリを使用して、Sale 属性の合計を検索していることがわかります。

2つの列を使用して MySQL でパーセンテージを計算する

IDGroupNameEmployeesCount、および SurveysCount を列名として持つ tests という名前のテーブルを作成します。ここで、IDPRIMARY KEY です。 次のクエリを使用して、チュートリアル全体を進めてください。

コード例:

# create a table
CREATE TABLE tests (
  ID INT NOT NULL,
  GroupName VARCHAR(45) NOT NULL,
  EmployeesCount INT NOT NULL,
  SurveysCount INT NOT NULL,
  PRIMARY KEY (ID));

# insert data
INSERT INTO tests (ID, GroupName, EmployeesCount, SurveysCount) VALUES
(1, 'Group A', '200', '10'),
(2, 'Group B', '300', '200'),
(3, 'Group C', '400', '300');

# display tests table data
SELECT * FROM tests;

出力:

+----+-----------+----------------+---------------+
| ID | GroupName | EmployeesCount | SurveysCount |
+----+-----------+----------------+---------------+
|  1 | Group A   |            200 |            10 |
|  2 | Group B   |            300 |           200 |
|  3 | Group C   |            400 |           300 |
+----+-----------+----------------+---------------+
3 rows in set (0.00 sec)

次のクエリを使用して、EmployeesCount および SurveysCount フィールドを使用してパーセンテージを計算します。

コード例:

SELECT GroupName, EmployeesCount, SurveysCount, COUNT( SurveysCount ) AS testA,
        concat(round(( SurveysCount/EmployeesCount * 100 ),2),'%') AS Percentage
FROM tests
GROUP BY EmployeesCount;

出力:

+-----------+----------------+--------------+-------+------------+
| GroupName | EmployeesCount | SurveysCount | testA | Percentage |
+-----------+----------------+--------------+-------+------------+
| Group A   |            200 |           10 |     1 | 5.00%      |
| Group B   |            300 |          200 |     1 | 66.67%     |
| Group C   |            400 |          300 |     1 | 75.00%     |
+-----------+----------------+--------------+-------+------------+
3 rows in set (0.00 sec)

SurveysCountEmployeesCount で割り、100 を掛けてパーセンテージを計算します。読みやすくするために、round() 関数を使用して小数点以下 2 桁に丸めます。

さらに concat() 関数を使って % 記号で連結し、分かりやすくします。

OVER() 関数を使用して MySQL でパーセンテージを計算する

OVER() 関数は、特定の範囲の値を計算する MySQL の ウィンドウ関数 の 1つです。 この関数を使用してパーセンテージを計算することもできます。

OVER() 関数は非常に便利で、パーセンテージを計算するためのサブクエリを回避するのに役立ちます。 この関数を理解するには、属性名として ProductIDProductName、および SupplierID を持つ products テーブルを作成します。

技術的には、SupplierID は外部キーでなければなりませんが、デモ用に単純なフィールドとして取り上げています。 次のクエリを使用して products テーブルを作成し、データを挿入します。

コード例:

CREATE TABLE products (
  ProductID INT NOT NULL,
  ProductName VARCHAR(45) NOT NULL,
  SupplierID INT NOT NULL,
  PRIMARY KEY (ProductID));

INSERT INTO products (ProductID, ProductName, SupplierID)
VALUES
(1,'Coca Cola', 2),
(2, 'Wavy Chips', 2),
(3, 'Dairy Milk Chocolate', 1),
(4, 'Parley Biscuits', 3),
(5, 'Knorr Nodles', 3),
(6, 'Snickers Chocolate', 3);

SELECT * FROM products;

出力:

+-----------+----------------------+------------+
| ProductID | ProductName          | SupplierID |
+-----------+----------------------+------------+
|         1 | Coca Cola            |          2 |
|         2 | Wavy Chips           |          2 |
|         3 | Dairy Milk Chocolate |          1 |
|         4 | Parley Biscuits      |          3 |
|         5 | Knorr Nodles         |          3 |
|         6 | Snickers Chocolate   |          3 |
+-----------+----------------------+------------+
6 rows in set (0.00 sec)

次に、次のクエリを使用して、各サプライヤーから供給される製品の割合を計算します。 サブクエリの代わりに OVER() 関数を使用して積の合計を取得します。

コード例:

SELECT SupplierID AS Supplied_By, count(*) * 100.0 / sum(count(*)) Over() as 'Supplier Percentage'
FROM products
GROUP BY SupplierID;

出力:

+-------------+---------------------+
| Supplied_By | Supplier Percentage |
+-------------+---------------------+
|           2 |            33.33333 |
|           1 |            16.66667 |
|           3 |            50.00000 |
+-------------+---------------------+
3 rows in set (0.09 sec)
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MySQL Query