SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.04.2019 06:46:30

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Подскажите как сделать group by

Ребят, привет.

Помогите, пожалуйста, заклинило.
Нужно превратить:


offer_id    campaign_id    thirtydayspriorsales
m5-01       21                23
m5-01       21                NULL
m5-03       23                877
m5-05       23                NULL
m5-06       23                NULL

В следующее:

offer_id    campaign_id    thirtydayspriorsales
m5-01       21                23
m5-03       23                877
m5-05       23                NULL
m5-06       23                NULL

То есть grop by по offer_id, campaign_id. Но при этом выбирать нужно все три колонки.
Если делать обычный groub by по offer_id, campaign_id, то ошибка:
column "thirtydayspriorsales" must appear in the GROUP BY clause or be used in an aggregate function

PS: видимо, это будет работать в MySQL, не работает в Postgres... (https://medium.com/@riccardoodone/the-l … 57b2a70229)

Отредактированно FiMko (25.04.2019 06:59:44)

Неактивен

 

#2 25.04.2019 07:03:31

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Подскажите как сделать group by

It’s interesting to notice that MySQL didn’t historically conform to SQL standards. As a matter of fact, the engine let you SELECT anything in a query with a GROUP BY . Including non-aggregated columns that do not appear in the GROUP BY and that are not functionally dependent upon the GROUP BY clause:
Luckily, the correct behavior can be enabled by adding a flag (i.e. ONLY_FULL_GROUP_BY) or by using MySQL v5.7.5 or higher. In that case, the query would raise the following error:
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'some_database.films.title' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Короче надо мне как-то добавить, видимо IF_NULL в SELECT.
Нужно сгруппировать по принципу offer_id и campaign_id, одинаковые, для остальных колонок при группировании игнорируем те строки, что с NULL.

Отредактированно FiMko (25.04.2019 07:10:43)

Неактивен

 

#3 25.04.2019 07:40:52

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Подскажите как сделать group by

Короче сделал иначе (вот этот тред натолкнул на мысль: https://dba.stackexchange.com/questions … ull-values)

select
  offer_id,
  campaign_id,
  max(thirtydayspriorsales) thirtydayspriorsales,
  max(thirtydaysaftertransactions) thirtydaysaftertransactions
from
...
group by offer_id, campaign_id;

Ключевое - агрегирующая функция max

Отредактированно FiMko (25.04.2019 07:41:28)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson