MySQL でパーセンテージを計算する
1つまたは複数の列を使用して、MySQL でパーセンテージを計算します。 それにはさまざまな方法があり、すべてのアプローチでサンプル テーブルを使用します。
1つの列を使用して MySQL でパーセンテージを計算する
sales
という名前のテーブルがあり、ID
、RepresentativeName
、および 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 でパーセンテージを計算する
ID
、GroupName
、EmployeesCount
、および SurveysCount
を列名として持つ tests
という名前のテーブルを作成します。ここで、ID
は PRIMARY 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)
SurveysCount
を EmployeesCount
で割り、100 を掛けてパーセンテージを計算します。読みやすくするために、round()
関数を使用して小数点以下 2 桁に丸めます。
さらに concat()
関数を使って %
記号で連結し、分かりやすくします。
OVER()
関数を使用して MySQL でパーセンテージを計算する
OVER()
関数は、特定の範囲の値を計算する MySQL の ウィンドウ関数 の 1つです。 この関数を使用してパーセンテージを計算することもできます。
OVER()
関数は非常に便利で、パーセンテージを計算するためのサブクエリを回避するのに役立ちます。 この関数を理解するには、属性名として ProductID
、ProductName
、および 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)