迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中计算百分比

作者:迹忆客 最近更新:2023/05/07 浏览次数:

我们将使用一个或多个列来计算 MySQL 中的百分比。 有不同的方法可以做到这一点,对于每种方法,我们都将使用一个示例表。


在 MySQL 中使用一列来计算百分比

我们有一个名为 sales 的表,其中 ID、RepresentativeName 和 Sale 是列名。 以下查询可用于创建和填充销售表以练习本教程。

示例代码:

# 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 字段的百分比,我们可以 CROSS JOIN Sale 属性的 SUM() 函数与原始关系(表)。 请参阅以下查询来执行此操作。

示例代码:

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() 方法来获取两位小数的结果。 如果我们关注用于查找百分比的查询,我们可以看到我们正在使用 CROSS JOIN 关键字后的子查询来查找 Sale 属性的总和。


在 MySQL 中使用两列计算百分比

我们创建一个名为 tests 的表,其中 ID、GroupName、EmployeesCount 和 SurveysCount 作为列名,其中 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() 函数将其四舍五入到小数点后两位,以使其更具可读性。

此外,使用 concat() 函数将其与 % 符号连接起来,使其易于理解。


在 MySQL 中使用 OVER() 函数计算百分比

OVER() 函数是 MySQL 中的窗口函数之一,用于计算特定值范围内的值。 我们也可以使用此函数来计算百分比。

OVER() 函数非常有用,可以帮助我们避免计算百分比的子查询。 创建一个将 ProductID、ProductName 和 SupplierID 作为属性名称的产品表以了解此功能。

从技术上讲,SupplierID 必须是一个外键,但我们将其作为一个简单的字段来演示。 使用以下查询创建产品表并插入数据。

示例代码:

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)

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 MySQL 中声明和使用变量

发布时间:2024/03/26 浏览次数:115 分类:MySQL

当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

在 MySQL 中实现刷新权限

发布时间:2024/03/26 浏览次数:211 分类:MySQL

本教程介绍了 MySQL 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 MySQL 中设置时区

发布时间:2024/03/26 浏览次数:93 分类:MySQL

在本教程中,我们将学习如何在 MySQL 服务器中更改时区。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便