GROUP BY t1.id - не могу понять как он это делает?

D
На сайте с 28.06.2008
Offline
976
223

Вы наверное соскучились, думаете - "Ну где же новые вопросы?" извелись наверное уже :)))

Хорошо, не буду томить, вот новая задачка :)))

Я гуглил сначала, честно :)))

Запрос вида

SELECT t1.*,t5.value,t5.year,
CONCAT_WS('-', t1.id, t1.alias) AS item_alias,
CONCAT_WS('-', t2.id, t2.alias) AS category_alias,
CONCAT_WS('-', t3.id, t3.alias) AS section_alias
FROM items AS t1
INNER JOIN categories AS t2 ON t1.category_id = t2.id
INNER JOIN sections AS t3 ON t1.section_id = t3.id
LEFT JOIN address AS t4 ON t1.id = t4.item_id
LEFT JOIN price AS t5 ON t5.item_id = t1.id
WHERE t1.rayon = "Хабаровск"
GROUP BY t1.id
ORDER BY `t5`.`value` DESC

В таблице price - которая t5 в поле year есть разные года - 16,17,18,19.

Почему когда есть GROUP BY t1.id - в результате в поле t5.year остается только 2018 год либо NULL ?

Данных `t5`.`value за 2018 год больше всего. Но мне не понятен порог срабатывания.

Вот допустим начну я добавлять данные 2019 год, когда в итоге в этом запросе он заменит 2018 ?

edogs software
На сайте с 15.12.2005
Offline
714
#1

Dram,

Выбор члена группы НЕ определен никак.

Группируете по t1.id - в t5.value может оказаться любое значение из группы t1.id, если там есть 1 5 9 и нулл - может оказаться или 1 или 5 или 9 или нулл - как звезды лягут. Порога срабатывания нет, алгоритма выбора нет.

Хотите минимальное или максимальное значение - используйте агрегирующие функции типа max, min. Хотите все значения - используйте group_concat.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий