MySQL获取值并使用它们计算百分比

时间:2014-05-13 00:57:36

标签: php mysql performance

我有一个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。

我认为我有两种方法可以解决这个问题:

  1. 我用经典方式做,让php计算循环中的百分比值
  2. 我在计算中再次使用聚合函数,如下所示:

    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在我的意见中会更有效率。

1 个答案:

答案 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很容易获得。

这只是我的一个假设。等待更多回复。