Group by и тип text

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
vuzya
рядовой
Сообщения: 16
Зарегистрирован: 2008-06-22 0:14:01

Group by и тип text

Непрочитанное сообщение vuzya » 2009-11-03 19:57:20

Здравствуйте. Внитри одной процедуры имеется следующий запрос:

Код: Выделить всё

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. поскольку я очень начинающий, то запросы у меня бывают хорошие и разные. Больше конечно разных. Поэтому предупредите пожалуйста, если запросы такого типа лудше вообще не использовать, и подскажите чем лудше заменить.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Group by и тип text

Непрочитанное сообщение zg » 2009-11-03 20:09:18

vuzya писал(а):и подскажите чем лудше заменить.
гм.. может всё-таки лучше? :smile:
vuzya писал(а):мне нужно чтобы все выбраные столбцы имелись в GROUP BY
зачем? в этом нет смысла

vuzya
рядовой
Сообщения: 16
Зарегистрирован: 2008-06-22 0:14:01

Re: Group by и тип text

Непрочитанное сообщение vuzya » 2009-11-03 20:38:42

zg писал(а):vuzya писал(а):мне нужно чтобы все выбраные столбцы имелись в GROUP BY зачем? в этом нет смысла
Так мне пишет в сообщении об ошибке, если я этого не сделаю. Что-то в духе "столбец недопустим так как не содержится ни в статических функциях, ни в списке GROUP BY"

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Group by и тип text

Непрочитанное сообщение Gamerman » 2009-11-03 20:42:36

Потомучто при группировке нужно использовать агрегатные функции к столбцам, которые не описаны в части group by.
Глюк глюком вышибают!

vuzya
рядовой
Сообщения: 16
Зарегистрирован: 2008-06-22 0:14:01

Re: Group by и тип text

Непрочитанное сообщение vuzya » 2009-11-03 21:11:22

Ну я же немогу никакую агрегирующую функцию применить к полю типа text... И в group by, тоже немогу.

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Group by и тип text

Непрочитанное сообщение Gamerman » 2009-11-03 21:15:31

vuzya писал(а):Ну я же немогу никакую агрегирующую функцию применить к полю типа text... И в group by, тоже немогу.
А что же за запрос ты хочешь тогда получить? Если группируешь, то какой же результат должен быть, если в разных строчках поле текст будет разным?

Может все таки нужно сначала определиться, что нужно получить, переделать запрос?
Глюк глюком вышибают!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Group by и тип text

Непрочитанное сообщение zg » 2009-11-03 21:57:27

vuzya писал(а):Ну я же немогу никакую агрегирующую функцию применить к полю типа text... И в group by, тоже немогу.
то, что ты хочешь сделать одним запросом (и, видимо, ловко сэкономить), делается через временную таблицу

vuzya
рядовой
Сообщения: 16
Зарегистрирован: 2008-06-22 0:14:01

Re: Group by и тип text

Непрочитанное сообщение vuzya » 2009-11-03 22:14:46

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
Будет ли это рациональнее чем выносить "внутринний" селект в временную таблицу?

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Group by и тип text

Непрочитанное сообщение Gamerman » 2009-11-03 22:16:18

А что в Posts.Text хранится?
Глюк глюком вышибают!

vuzya
рядовой
Сообщения: 16
Зарегистрирован: 2008-06-22 0:14:01

Re: Group by и тип text

Непрочитанное сообщение vuzya » 2009-11-03 22:42:47

Текст сообщения на форуме

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Group by и тип text

Непрочитанное сообщение zg » 2009-11-03 22:43:39

vuzya писал(а):2 zg: Посоветовали решить следующим образом:
-))) не от великого ума посоветовали. Подзапрос - таже самая временная таблица, только гораздо хуже в плане производительности и сильно усложняет понимание запроса.

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Group by и тип text

Непрочитанное сообщение Gamerman » 2009-11-03 22:52:41

vuzya писал(а):Текст сообщения на форуме
Тогда он практически не повторяется, какой смысл в его группировке?

А можете на пальцах объяснить, что есть и чего вы хотите сделать запросом?
Глюк глюком вышибают!

vuzya
рядовой
Сообщения: 16
Зарегистрирован: 2008-06-22 0:14:01

Re: Group by и тип text

Непрочитанное сообщение vuzya » 2009-11-03 23:47:11

В его группировке нет смысла, но поскольку мне нужно посчитать COUNT(User_Posts.PostId) (число сообщений для каждого юзера), то любой выбранный столбец должен быть или в агрегирующей функции, или в GROUP BY - таковы правила построения запроса.

Есть форум, таблицы: Posts, Users. Надо сделать запрос, который будет возвращать текст поста(сообщения), информацию о пользователе, написавшем пост, и подсчитывает количество сообщений от этого юзера по всему форуму.

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Group by и тип text

Непрочитанное сообщение Gamerman » 2009-11-03 23:48:53

vuzya писал(а): Есть форум, таблицы: Posts, Users. Надо сделать запрос, который будет возвращать текст поста(сообщения), информацию о пользователе, написавшем пост, и подсчитывает количество сообщений от этого юзера по всему форуму.
Используйте несколько запросов.
Глюк глюком вышибают!