Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
GROUP BY? (mofa) 19/11/2005 - 15:01:24
      Re: GROUP BY? (Dinky) 20/11/2005 - 20:23:18
      Re: GROUP BY? (mofa) 21/11/2005 - 17:17:48
      Re: GROUP BY? (Dinky) 21/11/2005 - 19:07:44

> Original message text:
> From: mofa - 19/11/2005 - 15:01:24
> Subject:GROUP BY?
> -----------------
> Здравствуйте.
> У меня возниукла проблема. Запрос возвращает записи, которые нужно сгруппировать по полю fileld1. Но иногда в результате запроса встречаются несколько одинаковых записей. Как из нескольких одинаковых сделать одну, причем чтобы группировка проводилась все так же по полю field1?
>
> Если нужны подробности, вот они:
>
> Вот запрос:
> SELECT v2.user_id, SUM(abs(v3.mark-v2.mark)) AS delta, COUNT(*) as s, v1.mark as mark FROM `ks_voting` v1 LEFT JOIN ks_voting v2 ON (v1.el_id=16 AND v1.user_id = v2.user_id) LEFT JOIN ks_voting v3 ON (v3.user_id=4 AND v2.el_id=v3.el_id) WHERE !(v2.user_id IS NULL) AND !(v3.user_id IS NULL) AND v2.user_id<>4 GROUP BY v2.user_id HAVING s>=10
>
> Что он делает: он выбирает из таблицы голосований людей, которые проголосовали с пользователем (номер 4) более, чем за 10 элементов, проголосовали за элемент номер 16 и также выбирает сумму разностей оценок за элементы, поставленных пользователем номер 4 и каждым другим пользователем.
> Структура таблицы ks_voting:
> user_id INT NOT NULL, el_id INT NOT NULL, mark TINYINT NOT NULL
>
> Все работает прекрасно, пока я не пытаюсь сделать вот что: я хочу, чтобы разность оценок выбиралась только в пределах определенных групп элементов. Каждый элемент может относиться к нескольким группам. Поэтому заведена табличка
> ks_el_vs_group: el_id INT NOT NULL, group_id INT NOT NULL.
>
> Чтобы выбирать только элементы, скажем, из групп 12 и 16 запрос изменяется следующим образом:
>
> SELECT v2.user_id, SUM(abs(v3.mark-v2.mark)) AS delta, COUNT(*) as s, v1.mark as mark FROM `ks_voting` v1 LEFT JOIN ks_voting v2 ON (v1.el_id=16 AND v1.user_id = v2.user_id) LEFT JOIN ks_voting v3 ON (v3.user_id=4 AND v2.el_id=v3.el_id) LEFT JOIN ks_el_vs_group evg ON (v3.el_id = evg.film_id AND evg.group_id IN (16, 12) ) WHERE !(v2.user_id IS NULL) AND !(v3.user_id IS NULL) AND !(evg.group_id IS NULL) AND v2.user_id<>4 GROUP BY v2.user_id HAVING s>=10
>
> Все тоже работет нормально, но если есть элемент, который относится и к группе 12, и к группе 16, то он появится в выборке дважды. А этого быть не должно. Как избавиться от "лишних" записей?
>


From: Dinky - 20/11/2005 - 20:23:18
Subject:GROUP BY?
-----------------
как все запутано :)
а зачем Вам LEFT JOIN? с проверкой на !(IS NULL) это получается обычный INNER JOIN как я понимаю
может попробуете? ;)

--
Dmitry


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
25227



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |