|
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
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, то он появится в выборке дважды. А этого быть не должно. Как избавиться от "лишних" записей?
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
25227
|
|