Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 сгруппировать кроме null значений  [new]
ambasador
Member

Откуда:
Сообщений: 68
Приветствую участников форума!
Не могу понять логику следующего запроса. Имеем таблицу:

id | value
1 | 2
2 | 3
3 | 2
4 | NULL
5 | NULL
6 | NULL

Нужно получить такие данные на выходе:

id | value
1 | 2
2 | 3
4 | NULL
5 | NULL
6 | NULL

Короче сгруппировать строки в которых поле value не null.
Везде(в частности на stackoverflow.com) рекомендуют в конце запроса - group by ifnull(value, id). Потом еще через незнакомый мне ранее оператор - group by coalesce(value, id), но суть та-же.
В результате запрос группирует по value, но строки с null значениями исчезают.
Даже пробовал - group by if(isnull(value), id, value), результат такой-же.
22 сен 17, 15:45    [20816532]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
ambasador
Member

Откуда:
Сообщений: 68
Если быть точнее то вот еще пример:
Запрос:
select * from test;


Вывод:
"id" "album_id" "album_name"
"1" "22" "test1"
"2" "4" "test2"
"3" "22" "test3"
"9" NULL "test4"
"10" NULL "test5"

Запрос:
select id, album_id, album_name, if(isnull(album_id), 0, count(*)) as cnt from test
group by ifnull(album_id, id);


"id" "album_id" "album_name" "cnt"
"2" "4" "test2" "1"
"9" NULL "test4" "0"
"10" NULL "test5" "0"
"1" "22" "test1" "2"

Как видно запрос вернул то что нужно, но мне нужно проделать тоже самое с таблицей результат которой многочисленных фильтров и джоинов, и структура этой таблицы аналогична тестовой, которая представлена в этом посте.
Не могу понять где ошибка
22 сен 17, 16:32    [20816820]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16308
GROUP BY COALESCE(album_id, RAND())album_id
22 сен 17, 17:12    [20816959]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16308
Ну и соответственно
SUM(IF(ISNULL(album_id), 0, 1))
22 сен 17, 17:14    [20816963]     Ответить | Цитировать Сообщить модератору
 Re: статистика посещений проектирование базы  [new]
ambasador
Member

Откуда:
Сообщений: 68
Akina
GROUP BY COALESCE(album_id, RAND())album_id

Может вы имели ввиду вот это:
GROUP BY COALESCE(album_id, id), album_id

Потому что этот запрос правильно выбирает и в тестовой таблице и в целевой, благодарю за наводку!
23 сен 17, 08:52    [20817754]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16308
ambasador
Может вы имели ввиду вот это

Я имел в виду строго то, что написАл. Не надо пытаться договаривать за меня - всё равно не получится.
ambasador
этот запрос правильно выбирает и в тестовой таблице и в целевой

В твоём частном случае - оно работает, потому что ID уникален. Но если в таблице нет уникального поля (или оно имеет неудобный тип), то такой подход приведёт к косякам, а то и проблемам.
23 сен 17, 20:19    [20818265]     Ответить | Цитировать Сообщить модератору
 Re: статистика посещений проектирование базы  [new]
ambasador
Member

Откуда:
Сообщений: 68
Akina
Я имел в виду строго то, что написАл.

Прям таки строго? Если это строго
GROUP BY COALESCE(album_id, RAND())album_id

То тогда это Syntax Error. Вот поэтому я уточняю, а может вы RAND() вместо id по ошибке ляпнули.
В следующий раз, просто будьте внимательны!
24 сен 17, 05:17    [20818646]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16308
ambasador
тогда это Syntax Error.
Я проверил код, прежде чем постить. Никакого Syntax Error, результат соответствует требуемому.
24 сен 17, 16:03    [20818969]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
ambasador
Member

Откуда:
Сообщений: 68
Akina
ambasador
тогда это Syntax Error.
Я проверил код, прежде чем постить. Никакого Syntax Error, результат соответствует требуемому.

Да черт-побери, я про запятую после coalesce
25 сен 17, 07:58    [20819639]     Ответить | Цитировать Сообщить модератору
 Re: сгруппировать кроме null значений  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16308
ambasador, О! глаз-алмаз... да, уговорил, запятая там и вправду нужна.
25 сен 17, 09:59    [20819816]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить