我有一种情况,我已经使用下面的查询来淘汰某些用户的使用,但问题是现在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'
第3版查询
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
答案 0 :(得分:2)
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,你想要什么?