Laravel / MySQL при использовании AVG (только обратный отсчет первой строки по заданному идентификатору) - как? - PullRequest
0 голосов
/ 05 сентября 2018

Мой AVG (рейтинг) вернет 2 и 34 клика в этом случае. Но как мне заставить его считать только первый ряд рангов? Таким образом, он будет занимать только один ранг каждого ключевого_идентификатора от каждой даты в интервале.

$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 голосов
/ 05 сентября 2018

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...