添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
在 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)