mysql查询优化(使用sum函数)

标签 mysql database query-optimization

我遇到了一种情况,我使用下面的查询来取消某些用户的使用,但问题是现在 mysql 汇总了表中的所有记录。我不想获取所有记录的总和,只是想在总和大于 500 时停止查询。我已经厌倦了 3 种不同的方式。任何人都可以建议我哪种是实现结果的最佳方法。

第一个版本查询

 SELECT
(SUM(radacct.acctinputoctets) + SUM(radacct.acctoutputoctets))/8388608 AS total_usage
FROM `radacct`
WHERE username ='fktmbishals'

第二版查询

SELECT
if ((SUM(radacct.acctinputoctets) + SUM(radacct.acctoutputoctets))/8388608 > 500   , 500, 0) AS total_usage
FROM `radacct`
WHERE username ='fktmbishals'

第三版查询

SELECT
(SUM(temp_radacct.acctinputoctets) + SUM(temp_radacct.acctoutputoctets))/8388608 AS total_usage
FROM (
   SELECT
radacct.acctinputoctets,radacct.acctoutputoctets
FROM `radacct`
WHERE username ='fktmbishals'
LIMIT 10
) as temp_radacct

最佳答案

SET @tot := 0; 
SELECT  total_usage 
    FROM  
      ( SELECT  @usage := acctinputoctets + acctoutputoctets AS usage,
                @tot := @tot + @usage / 8388608 AS total_usage
            FROM  radacct
            WHERE username ='fktmbishals'
            ORDER BY  ?? 
      ) x
    HAVING  Total < 500; 

这会显示运行总计,直到超过 500。这是您想要的吗?或者你想要最后一个值?如果是这样,请将其放入另一个使用 LIMIT 1 的查询中。

您需要什么ORDER BY

您不需要知道 500 项由哪些项目组成吗?

如果总数小于 500,您想要什么?

关于mysql查询优化(使用sum函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36257606/

相关文章:

mysql - DB 导入已取消 : "Cannot add foreign key constraint"

database - 将 xsd/xml 集成到数据库中的 GUI 工具

mysql - 查找并删除 SQL 记录(如果它们发生在 8 小时内)(最近的记录除外)

mysql - 优化包含 EXISTS 的 MySQL UPDATE 查询的性能

mysql - 针对大型查询优化 MySql 数据库

optimization - MySQL GROUP BY 优化

mysql - 使用带有扭曲的 adbapi 和 scrapy 的 mysql 进行异常处理

mysql - 转向 SQL Access

mysql - 将行更新为另一个表中未设置的行的副本

MySql 3表连接、分组和求和