Задавайте вопросы, мы ответим
Вы не зашли.
Уже уши пухнут от идей что может быть не так. Имеется таблица операторов сотовой связи и таблица телефонных номеров, нужно вывести инфу по операторам + посчитать сколько номеров имеется по каждому. Структуры таблиц приводить не буду, дело примитивное В итоге вполне логичный запрос возвращает не все записи операторов (2 из 8).
SELECT
`opsos`.`id` ,
`opsos`.`country_id` ,
`opsos`.`code` ,
`opsos`.`name`,
COUNT( `numbers`.`id` ) AS `numbers`
FROM `opsos`
LEFT JOIN `numbers`
ON `numbers`.`code` = `opsos`.`code`
GROUP BY `numbers`.`code`
Почему-то происходит группировка по количеству номеров, потому-что в результирующих строках один оператор имеет Х кол-во номеров, а другой - 0 (на самом деле 0 номеров у всех остальных операторов, а возвращается только один).
Куда копать?
ЗЫ Пока писал и по ходу тестил варианты, решил проблему. Изменил группировку с `numbers`.`code` на `opsos`.`code` и результат стал таким, каким должен быть. Но лично я не понимаю почему так. Подскажите где логика? ИМХО, первый вариант как раз должен работать, а второй - нет.
Неактивен
Кто ж знает, какие у Вас там данные
Рабочее предположение — в numbers нет строк с соответствующим code, а по NULL группировать бессмысленно
Неактивен
Собственно так и есть, из 8ми уникальных code, в numbers есть данные только для одного code, для остальных семи я ожидал увидеть 0 в результате)) Какие ещё могут быть варианты? Что-то мне мой конечный вариант не очень нравится, почему-то я считаю что он не должен работать как надо)) А Дописывать IF(`numbers`.`code` IS NULL, 0, `numbers`.`code`) как-то не кошерно)))
Неактивен
А зачем другие варианты, если первый — правильный?
Группировать надо по `opsos`.`code` — и все
Неактивен
Хм, я всегда думал, что нужно указывать поле, которое нужно группировать, а оказывается нужно указать поле со значением, по которому группировать? Я правильно понял? Позор мне карочь))
Неактивен