一个奇怪的SQL查询可能使用sum?

时间:2016-02-24 09:24:07

标签: php sql laravel

我希望获得一些sql帮助。以下是我的表格的示例:

username  |  dataout(MB)  | datain(MB)`|  sessiontime
Dude      |  1000         | 500        |  2016-02-24 07:30:00
Dude      |  2500         | 3000       |  2016-01-31 07:30:00

我想要离开的地方:

username  |  data(MB) (all data counted together)  |
Dude      |    7000                                |

我的Sql看起来像这样:

$allusers = db('DataBase')
        ->table('userinfo')
        ->join('radcheck', 'radcheck.username', '=', 'userinfo.username')
        ->join('pricing', 'pricing.pkg_id', '=', 'userinfo.PAKKET')
        ->join('radacct', 'radacct.username', '=', 'userinfo.username')
        ->select('pricing.price',
            'pricing.Tusage',
            'userinfo.RKNR',
            'userinfo.MEMO',
            'userinfo.DTORDER',
            'radacct.dataout',
            'radacct.datain')
        ->where('radcheck.active', '=', 1)
        ->where('radcheck.enabled', '=', 1)
        ->where('radacct.acctstarttime', '>', $monthStart)
        ->where('radacct.acctstarttime', '<', $monthEnd)
        ->get();

提前谢谢你。

以下是我查询的内容:

Output

问题是所有这些数组都是针对同一个用户(RKNR)而我需要一个包含所有数据的数组,并且需要一个数组。

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT   username,
         SUM(dataout + datain) AS total_data
FROM     .... (insert tables/join over here)
GROUP BY username;

答案 1 :(得分:0)

您可以尝试这样的方法,以datain之前得到dataoutusername的总和:

SELECT username, SUM(dataout) + SUM(datain) AS data FROM tablename WHERE username = 'username';

答案 2 :(得分:0)

感谢knn。我使用SQL作为 - &gt; selectRaw。它完美无缺。 对于将来的参考,这就是它的结果:

$allusers = db('radius')
        ->table('userinfo')
        ->join('radcheck', 'radcheck.username', '=', 'userinfo.username')
        ->join('pricing', 'pricing.pkg_id', '=', 'userinfo.PAKKET')
        ->join('radacct', 'radacct.username', '=', 'userinfo.username')
        ->select('pricing.price',
            'pricing.Tusage',
            'userinfo.RKNR',
            'userinfo.MEMO',
            'userinfo.DTORDER')
        ->selectRaw(' SUM(acctinputoctets) + SUM(acctoutputoctets) AS TotalOctets')
        ->where('radcheck.active', '=', 1)
        ->where('radcheck.enabled', '=', 1)
        ->where('radacct.acctstarttime', '>', $monthStart)
        ->where('radacct.acctstarttime', '<', $monthEnd)
        ->get();