我有一个MySQL查询,通过计算从表中获取一些值。在我的程序中,我需要显示原始值和百分比值,例如“你使用了100(1%)中的1个”。据我所知,最好使用数据库服务器进行计算而不是后端(在我的情况下是php)。所以我试过这样的事情
SELECT SUM(used) AS totalUsed, MAX(quota) AS totalQuota, 100 * totalUsed / totalQuota AS percentUsed
但是我收到错误,因为数据库引擎无法找到字段'totalUsed'和'totalQuota'。通过做一些互联网服务,我发现似乎以后在SELECT-Part中使用别名就像变量一样。那里的人建议改用subselect。如果它们可以避免,我不认为子项目不好。在我的情况下,我从不同的表中获取数据,我正在使用JOIN,尤其是为了避免subselect-querys。
我认为我有两种方法可以解决这个问题:
我在计算中再次使用聚合函数,如下所示:
SELECT SUM(used) AS totalUsed, MAX(quota) AS totalQuota, 100 * SUM(used) / MAX(quota) AS percentUsed I
但是在这里我不确定mysql是如何处理查询的:mysql是否足够聪明地看到:SUM(used)在查询中是2次,所以mysql对两个aggretate函数进行计算SUM和MAX只有一个时间和第二次他使用变量。或者mysql不关心这个并做两次计算?我认为这很重要,因为如果mysql很聪明并只进行一次计算,我认为让mysql完成这项工作会更好。但如果没有,php在我的意见中会更有效率。
答案 0 :(得分:0)
我认为它会计算两次。
我尝试运行以下内容:
SELECT
SUM(used) AS totalUsed,
MAX(quota) AS totalQuota,
(100 * (SELECT totalUsed) / (SELECT totalQuota)) AS percentUsed
FROM test123
并且它不起作用,但是如果你运行以下内容:
SELECT
20 AS totalUsed,
200 AS totalQuota,
(100 * (SELECT totalUsed) / (SELECT totalQuota)) AS percentUsed
FROM test123
它会起作用,因为数字20和200很容易获得。
这只是我的一个假设。等待更多回复。