SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 02.06.2009 16:36:14

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Запрос работает не так, как хотелось бы :)

Уже уши пухнут от идей что может быть не так. Имеется таблица операторов сотовой связи и таблица телефонных номеров, нужно вывести инфу по операторам + посчитать сколько номеров имеется по каждому. Структуры таблиц приводить не буду, дело примитивное smile В итоге вполне логичный запрос возвращает не все записи операторов (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` и результат стал таким, каким должен быть. Но лично я не понимаю почему так. Подскажите где логика? smile ИМХО, первый вариант как раз должен работать, а второй - нет.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#2 03.06.2009 15:52:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос работает не так, как хотелось бы :)

Кто ж знает, какие у Вас там данные wink
Рабочее предположение — в numbers нет строк с соответствующим code, а по NULL группировать бессмысленно smile

Неактивен

 

#3 03.06.2009 18:33:47

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Запрос работает не так, как хотелось бы :)

Собственно так и есть, из 8ми уникальных code, в numbers есть данные только для одного code, для остальных семи я ожидал увидеть 0 в результате)) Какие ещё могут быть варианты? smile Что-то мне мой конечный вариант не очень нравится, почему-то я считаю что он не должен работать как надо)) А Дописывать IF(`numbers`.`code` IS NULL, 0, `numbers`.`code`) как-то не кошерно)))


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#4 04.06.2009 20:43:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запрос работает не так, как хотелось бы :)

А зачем другие варианты, если первый — правильный?
Группировать надо по `opsos`.`code` — и все smile

Неактивен

 

#5 05.06.2009 13:08:50

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Запрос работает не так, как хотелось бы :)

Хм, я всегда думал, что нужно указывать поле, которое нужно группировать, а оказывается нужно указать поле со значением, по которому группировать? Я правильно понял? smile Позор мне карочь))


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

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