Страница 1 из 1
Group by и тип text
Добавлено: 2009-11-03 19:57:20
vuzya
Здравствуйте. Внитри одной процедуры имеется следующий запрос:
Код: Выделить всё
SELECT Posts.PostId, Users.UserName, ..., COUNT(User_Posts.PostId) AS NumberOfPosts, Posts.Text
FROM Posts INNER JOIN
Users ON Posts.AuthorId = Users.UserId INNER JOIN
Posts AS User_Posts ON Users.UserId = Posts.AuthorId
WHERE (Posts.TopicId = @TopicId)
GROUP BY Posts.PostId, Users.UserName, ...
ORDER BY ...
Вместо неважных деталей я поставил "..." . Проблема в следующем: поскольку я считаю посты, мне нужно чтобы все выбраные столбцы имелись в GROUP BY, но если я пытаюсь поместить туда Posts.Text(столбец типа text), то получаю ошибку что тип text не может быть сравнен(а следовательно и группировать по нему нельзя).
Подскажите пожалуйста как лудше всего выити с этого положения.
P.S. поскольку я очень начинающий, то запросы у меня бывают хорошие и разные. Больше конечно разных. Поэтому предупредите пожалуйста, если запросы такого типа лудше вообще не использовать, и подскажите чем лудше заменить.
Re: Group by и тип text
Добавлено: 2009-11-03 20:09:18
zg
vuzya писал(а):и подскажите чем лудше заменить.
гм.. может всё-таки
лучше?
vuzya писал(а):мне нужно чтобы все выбраные столбцы имелись в GROUP BY
зачем? в этом нет смысла
Re: Group by и тип text
Добавлено: 2009-11-03 20:38:42
vuzya
zg писал(а):vuzya писал(а):мне нужно чтобы все выбраные столбцы имелись в GROUP BY зачем? в этом нет смысла
Так мне пишет в сообщении об ошибке, если я этого не сделаю. Что-то в духе "столбец недопустим так как не содержится ни в статических функциях, ни в списке GROUP BY"
Re: Group by и тип text
Добавлено: 2009-11-03 20:42:36
Gamerman
Потомучто при группировке нужно использовать агрегатные функции к столбцам, которые не описаны в части group by.
Re: Group by и тип text
Добавлено: 2009-11-03 21:11:22
vuzya
Ну я же немогу никакую агрегирующую функцию применить к полю типа text... И в group by, тоже немогу.
Re: Group by и тип text
Добавлено: 2009-11-03 21:15:31
Gamerman
vuzya писал(а):Ну я же немогу никакую агрегирующую функцию применить к полю типа text... И в group by, тоже немогу.
А что же за запрос ты хочешь тогда получить? Если группируешь, то какой же результат должен быть, если в разных строчках поле текст будет разным?
Может все таки нужно сначала определиться, что нужно получить, переделать запрос?
Re: Group by и тип text
Добавлено: 2009-11-03 21:57:27
zg
vuzya писал(а):Ну я же немогу никакую агрегирующую функцию применить к полю типа text... И в group by, тоже немогу.
то, что ты хочешь сделать одним запросом (и, видимо, ловко сэкономить), делается через временную таблицу
Re: Group by и тип text
Добавлено: 2009-11-03 22:14:46
vuzya
2Gamerman: Мне НУЖНО групировать по Posts.Text(имеет тип text), но компилятор сторед процедур непозволяет так как столбец типа text не может быть групирован. Значения типа text даже сравнивать нисчем кроме NULL нельзя. А применить агрегирующую функцию я немогу "по смыслу" - желательный результат требует групированый Posts.Text.
2 zg: Посоветовали решить следующим образом:
Код: Выделить всё
SELECT aaa.PostId, aaa.UserName, ...,
aaa.NumberOfPosts, Posts.TEXT
FROM (
SELECT Posts.PostId, Users.UserName, ...,
COUNT(User_Posts.PostId) AS NumberOfPosts --, Posts.Text
FROM Posts INNER JOIN
Users ON Posts.AuthorId = Users.UserId INNER JOIN
Posts AS User_Posts ON Users.UserId = Posts.AuthorId
WHERE (Posts.TopicId = @TopicId)
GROUP BY Posts.PostId, Users.UserName, ...
ORDER BY ...) AS aaa
INNER join Posts ON Posts.PostId=aaa.PostId
Будет ли это рациональнее чем выносить "внутринний" селект в временную таблицу?
Re: Group by и тип text
Добавлено: 2009-11-03 22:16:18
Gamerman
А что в Posts.Text хранится?
Re: Group by и тип text
Добавлено: 2009-11-03 22:42:47
vuzya
Текст сообщения на форуме
Re: Group by и тип text
Добавлено: 2009-11-03 22:43:39
zg
vuzya писал(а):2 zg: Посоветовали решить следующим образом:
-))) не от великого ума посоветовали. Подзапрос - таже самая временная таблица, только гораздо хуже в плане производительности и сильно усложняет понимание запроса.
Re: Group by и тип text
Добавлено: 2009-11-03 22:52:41
Gamerman
vuzya писал(а):Текст сообщения на форуме
Тогда он практически не повторяется, какой смысл в его группировке?
А можете на пальцах объяснить, что есть и чего вы хотите сделать запросом?
Re: Group by и тип text
Добавлено: 2009-11-03 23:47:11
vuzya
В его группировке нет смысла, но поскольку мне нужно посчитать COUNT(User_Posts.PostId) (число сообщений для каждого юзера), то любой выбранный столбец должен быть или в агрегирующей функции, или в GROUP BY - таковы правила построения запроса.
Есть форум, таблицы: Posts, Users. Надо сделать запрос, который будет возвращать текст поста(сообщения), информацию о пользователе, написавшем пост, и подсчитывает количество сообщений от этого юзера по всему форуму.
Re: Group by и тип text
Добавлено: 2009-11-03 23:48:53
Gamerman
vuzya писал(а):
Есть форум, таблицы: Posts, Users. Надо сделать запрос, который будет возвращать текст поста(сообщения), информацию о пользователе, написавшем пост, и подсчитывает количество сообщений от этого юзера по всему форуму.
Используйте несколько запросов.