Laravel / MySQL在使用AVG时(仅计算第一行返回给定的ID)-如何?

时间:2018-09-05 06:32:21

标签: mysql laravel eloquent

在这种情况下,我的AVG(排名)将返回2和34 clicksSum。但是,如何只计算排名的第一行呢?这样一来,从该间隔中的每个日期起,每个keyword_id只会占据一个等级。

$interval = \DB::table('keywords')
->selectRaw('keyword, url, AVG(rank) rankAvg, SUM(clicks) clicksSum ')
->join('ranks', 'keywords.id', '=', 'ranks.keyword_id')
->whereBetween('ranks.date', array('2018-07-20','2018-07-29'))
->orderBy('clicksSum', 'DESC')
->groupBy('keywords.id')
->paginate(50);

Table: Keywords
id keyword
1  test

Table: Ranks
id keyword_id rank url      clicks date
1  1          2    /test/   29     2018-07-28 
1  1          4    /test2/  5      2018-07-28

我希望实现的目标是将rankAvg = 2并将clicksSum = 29。

表中有很多数据,这只是一个简单的例子。

1 个答案:

答案 0 :(得分:0)

您可以使用mysql max并按其排序

$interval = \DB::table('keywords')
->selectRaw('keyword, url, AVG(rank) rankAvg, SUM(clicks) clicksSum, max(clicks) as maxClicks')
->join('ranks', 'keywords.id', '=', 'ranks.keyword_id')
->whereBetween('ranks.date', array('2018-07-20','2018-07-29'))
->groupBy('keywords.id')
->orderBy('maxClicks')
->paginate(50);