我有下表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/