在 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)