mysql - 如何在 mysql 中显示具有计算的运行时值(即不在数据库中)的虚拟列?

标签 mysql sql

我有下表stuinfo

+------------+-------+-----------+
|   Roll_no  | Name  | Lastname  |
+------------+-------+-----------+
|   37032    | johny | bravo     |
|   37034    |  sam  | smith     |
+------------+-------+-----------+

和第二个 stu_attendace

+------------+-------+-----------+
|   Roll_no  | Name  | month     |
+------------+-------+-----------+
|   -1       | total |   26      |
|   37032    | johny |   19      |
|   37034    |  sam  |   25      |
+------------+-------+-----------+

总天数为 26 天,因此约翰尼的出勤率为 73.03%,山姆的出勤率为 95.03%。

那么我如何通过在运行时计算并在实际上不在数据库中的新列“per_attendace”中显示这些值来显示他们的出勤百分比。如下图所示

+----------+--------+-----------+---------------+
|  roll_no |  name  | last_name | per_attendace |
+----------+--------+-----------+---------------+
|  37032   |  johny | bravo     |  xx %         |
|  37034   |  sam   | smith     |  xx %         |
+----------+--------+-----------+---------------+

最佳答案

你可以轻松地做你想做的事,在 SELECT 子句中你可以选择一个文字值,或者一个列名,或者任何有效的表达式。

只需JOIN 两个表,然后像这样计算百分比:

SELECT 
  i.roll_no,
  i.name,
  i.Lastname,
  ((a.month / 26) * 100) AS percent
FROM stuinfo AS i
INNER JOIN stu_attendance AS a ON i.Roll_no = a.Roll_no;

注意:

  • 不需要在两个表中重复列名,只需将其从另一个表中删除,并保留您的表normalized .

  • 不要像这样将总值存储为列中的值。


更新:

如果要从数据库中选择合计的值,可以这样做:

SELECT 
  i.roll_no,
  i.name,
  i.Lastname,
  ((a.month / (SELECT month 
               FROM stu_attendace
               WHERE name = 'total')) * 100) AS percent
FROM stuinfo AS i
INNER JOIN stu_attendance AS a ON i.Roll_no = a.Roll_no;

您还可以将该总值设置为变量而不是相关子查询,如下所示:

SET @total = 0;

SELECT month 
FROM stu_attendace
WHERE name = 'total'
INTO @total;

然后:

SELECT 
  i.roll_no,
  i.name,
  i.Lastname,
  ROUND(((a.month / @total) * 100), 2) AS percent
FROM stuinfo AS i
INNER JOIN stu_attendace AS a ON i.Roll_no = a.Roll_no;

我使用 ROUND 函数将数字四舍五入为两位小数。

关于mysql - 如何在 mysql 中显示具有计算的运行时值(即不在数据库中)的虚拟列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19246051/

相关文章:

php - 在 mysqli 中带参数执行

java - 从 Oracle 的 Prepared Statement 获取结果 sql

java - 不能在 DDL 语句中使用绑定(bind)变量。备择方案?

sql - 选择oracle整个表中的单个最大值或最小值

MYSQL 查询不返回 BETWEEN 的结果,但在子查询中返回小于和等于的结果

mysql - 在 MySql 中创建插入语句的存储过程?

php - session /数组问题,购物车

php - 如何从 ftp 服务器获取最新修改的 csv 文件值并将其插入到 mysql 表中

mysql - 带外键的 SQL 条件

sql - 从表中选择 * 或从表中选择 id、field1、field2、field3 - 最佳实践?