我遇到了一种情况,我使用下面的查询来取消某些用户的使用,但问题是现在 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/