Группировать по, упорядочивать по не правильно - режим SQL - ONLY_FULL_GROUP_BY

0

Режим only_full_group_by включен.

Мой запрос заключается в объединении таблиц из 2 таблиц. Если я просто извлекаю данные, используя нижеприведенный запрос, он работает правильно и показывает мне правильные записи:

select p.product_category, m.profit 
from market_fact m inner join
     prod_dimen p
     on m.prod_id = p.prod_id;'

но если я использую группу по порядку по Profit desc, используя ниже, это не дает. записей исправляет их одно и то же - но не дает правильного порядка и и даже значения прибыли не одинаковы

select p.product_category, m.profit 
from market_fact m inner join
     prod_dimen p
     on m.prod_id = p.prod_id
order by m.Profit desc;

если я использую группу по категории продукта и порядок по прибыли -

select p.product_category, m.profit 
from market_fact m inner join
     prod_dimen p
     on m.prod_id = p.prod_id
group by p.Product_Category
order by m.Profit desc;

затем - он выдает ошибку: Код ошибки: 1055. Выражение №2 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец "superstoresdb.m.Profit", который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode = only_full_group_by

Как подойти к этому?

  • 0
    Вам необходимо предоставить образцы данных и результатов, чтобы мы могли видеть, в чем заключаются проблемы.
Теги:
sorting
group-by
sql-order-by

1 ответ

0
Лучший ответ

Вам нужно предоставить расчет агрегации (например, SUM, AVG, MAX, MIN) в m.profit, иначе SQL будет думать, что вы хотите GROUP BY.

Поэтому, если вы хотите увидеть категории продуктов по общей прибыли, попробуйте код ниже:

select p.product_category, SUM(m.profit) as profit 
from market_fact m inner join
     prod_dimen p
     on m.prod_id = p.prod_id
group by p.product_Category
order by SUM(m.profit) desc;

Если вы не хотите делать вычисления агрегации и просто хотите удалить дубликаты, вам лучше использовать предложение SELECT DISTINCT, а не GROUP BY:

select distinct p.product_category, m.profit
from market_fact m inner join
     prod_dimen p
     on m.prod_id = p.prod_id
order by m.profit desc;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню