Ошибка 1140 при использовании построителя запросов Laravel и подсчета агрегата - PullRequest
1 голос
/ 08 мая 2020

Я хочу выполнить следующий запрос SQL с помощью построителя запросов Laravel:

select `source`, `customer_id`, COUNT(id) from `requests` where `source` = "ATC" and `customer_id` = 1234567

Я пробовал использовать следующий код, но он работает некорректно:

DB::table('requests')->select('source', 'customer_id', DB::raw('COUNT(id)'))->where('source', '=', 'ATC')->where('customer_id', '=', '1234567')->get();

Я получил следующую ошибку:

SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'opadidb.requests.source'; this is incompatible with sql_mode=only_full_group_by (SQL: select `source`, `customer_id`, COUNT(id) from `requests` where `source` = ATC and `customer_id` = 1234567)

Может помочь?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Агрегатные функции, такие как sum, count, min, max, avg, при выборе с другими столбцами они должны иметь предложение groupBy для одного из этих столбцов.

в вашем запросе есть два столбца 'source' и 'customer_id', вы должны добавить группу по каждому из них:

DB::table('requests')->select('source', 'customer_id', DB::raw('COUNT(id)'))
->where('source', '=', 'ATC')->where('customer_id', '=', '1234567')
->groupBy('source','customer_id')->get();
1 голос
/ 08 мая 2020

Вы также не можете выполнить первый запрос, как это указано в сообщении, не внося изменений в ваш запрос или mysql настройки;

В агрегированном запросе без GROUP BY, выражение # 1 из списка SELECT содержит неагрегированный столбец opadidb.requests.source.

  • Вы измените настройки mysql, чтобы включить ONLY_FULL_GROUP_BY, подробнее здесь

  • Вы меняете запрос на что-то вроде этого, добавляя предложение group by в конце в зависимости от того, каких результатов вы хотите достичь.

  • Если он включен, то в качестве третьего варианта вы можете изменить свой database.php файл, чтобы изменить strict ключ вашей базы данных с true на false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...