Mysql ошибка запроса: список SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец, несовместимый с sql_mode = only_full_group_by - PullRequest
0 голосов
/ 02 марта 2020

Я извлекаю записи из двух таблиц, объединяя их, т.е. таблица продуктов будет объединена с таблицей оценок и получит продукт со средним рейтингом, но, к сожалению, он не работает на живом сервере, однако он отлично работает на локальном хосте, поэтому я следовал ниже ссылки, но без изменений, по-прежнему получают ту же ошибку, поэтому, наконец, я понимаю, что это проблема запроса, потому что localhost работает отлично, и если я пытаюсь внести изменения в режиме sql, это не разрешено в случае живого сервера mysql и отображения Превосходит ограничение, поэтому, какие изменения требуются в запросе для правильного получения результата.

product

id     product_name    keyword

1        A               xyz
2        B               abc
3        C               aaa
4        D               abc

rating

id      product_id    rating  

1          2             2
2          2             4
3          1             2
4          4             3
5          2             3
6          2             4

Mysql запрос:

select p.pid,
       p.product_name, 
       COALESCE(ROUND(AVG(r.rating), 1), 0) as avgRate 
from product p 
left join rating r on r.product_id=p.id  
WHERE (LOWER(p.product_name) LIKE '%a%'  
   OR LOWER(p.keyword) LIKE '%abc%' )
GROUP BY p.product_id

Реферальные ссылки:

Ошибка относится к only_full_group_by при выполнении запроса в MySql.

# 1055 - Выражение списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец, что несовместимо с sql_mode = only_full_group_by

Ответы [ 3 ]

1 голос
/ 02 марта 2020

Использование ANY_VALUE () Функция:

select ANY_VALUE(p.pid) pid,
       ANY_VALUE(p.product_name) product_name, 
       COALESCE(ROUND(AVG(r.rating), 1), 0) as avgRate 
from product p 
left join rating r on r.product_id=p.id  
WHERE (   LOWER(p.product_name) LIKE '%a%'  
       OR LOWER(p.keyword) LIKE '%abc%' )
GROUP BY p.product_id
1 голос
/ 02 марта 2020

Пожалуйста, проверьте решение здесь. установите системную переменную и удалите ONLY_FULL_GROUP_BY из системной переменной.

Отключить ONLY_FULL_GROUP_BY

1 голос
/ 02 марта 2020

Вам нужно добавить все неагрегированные столбцы в группе по

select p.pid,p.product_name, COALESCE(ROUND(AVG(r.rating), 1), 0) as avgRate 
    from product p left join rating r on r.product_id=p.id  
    WHERE (LOWER(p.product_name) LIKE '%a%'  OR LOWER(p.keyword) LIKE '%abc%' )
GROUP BY p.pid,p.product_name
...