Вложенный запрос SELECT ... FROM (SELECT ...)

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Батор
Сообщения: 21
Зарегистрирован: 11 мар 2007, 23:09

Вложенный запрос SELECT ... FROM (SELECT ...)

Сообщение Батор » 26 мар 2007, 01:40

вопрос: поддерживает ли IB7.5 конструкции типа SELECT ... FROM (SELECT ...)?

если не поддерживает, то подскажите как решить такую задачу:
есть справочник сотрудников, в нем ФИО разбито на 3 поля
нужно сделать выборку с группировкой по сотрудникам, что-то вроде

SELECT name_last ||' '|| name_first ||' '|| name_middle Name, COUNT(*) col FROM sometable LEFT JOIN spr_user ON spr_iser.id_user=sometable.id_user
WHERE ...
GROUP BY name_last ||' '|| name_first ||' '|| name_middle

проблема в том, что не дает делать группировку по name_last ||' '|| name_first ||' '|| name_middle и по Name тоже не дает, поэтому пытался сделать с помощью вложенного запроса, чтобы сгруппировать.

или можно как-то по-другому решить эту проблему?

можно, конечно, view сделать, но у меня общий вопрос про группировку по составному текстовому полю и возможность вложенного запроса.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Вложенный запрос SELECT ... FROM (SELECT ...)

Сообщение WildSery » 26 мар 2007, 11:56

Батор писал(а):поддерживает ли IB7.5 конструкции типа SELECT ... FROM (SELECT ...)?
Если он у тебя стоит (раз ты задачу для него решаешь), то как насчёт попробовать?
А ещё попробуй GROUP BY 1

Батор
Сообщения: 21
Зарегистрирован: 11 мар 2007, 23:09

Re: Вложенный запрос SELECT ... FROM (SELECT ...)

Сообщение Батор » 26 мар 2007, 23:15

WildSery писал(а):Если он у тебя стоит (раз ты задачу для него решаешь), то как насчёт попробовать?
пробовал - чего-то не выходит... но может я чего не знаю, например в MSSQL для этого обязательно надо AS добавлять: SELECT ... FROM (SELECT ...) AS Something
WildSery писал(а): А ещё попробуй GROUP BY 1
для ORDER BY срабатывает, а для GROUP BY нет :(

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 мар 2007, 11:23

Вообще, что это я?

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

SELECT name_last ||' '|| name_first ||' '|| name_middle Name, 
       (select COUNT(*) FROM sometable where s.id_user=id_user)
FROM spr_user s
WHERE ...

Батор
Сообщения: 21
Зарегистрирован: 11 мар 2007, 23:09

Сообщение Батор » 27 мар 2007, 23:17

WildSery писал(а):Вообще, что это я?

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

SELECT name_last ||' '|| name_first ||' '|| name_middle Name, 
       (select COUNT(*) FROM sometable where s.id_user=id_user)
FROM spr_user s
WHERE ...
в целевом запросе несколько объединений и группировка по куче полей, а пример для простоты понимания проблемы привел

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 мар 2007, 11:19

Батор писал(а):в целевом запросе несколько объединений и группировка по куче полей, а пример для простоты понимания проблемы привел
Ага, значит, ты думаешь, что если тебе найти простое и быстрое решение для упрощённого запроса, то применив его в своём большом, получишь тот же результат?
Наивный :roll:
Ну сделай так, если не боишься NULLов.

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

SELECT name_last ||' '|| name_first ||' '|| name_middle Name
...
GROUP BY name_last, name_first, name_middle

Батор
Сообщения: 21
Зарегистрирован: 11 мар 2007, 23:09

Сообщение Батор » 29 мар 2007, 02:02

подошло...
сам почему-то этот вариант не рассмотрел :(

basile
Сообщения: 26
Зарегистрирован: 10 июл 2005, 02:28

Re: Вложенный запрос SELECT ... FROM (SELECT ...)

Сообщение basile » 12 сен 2007, 07:52

вот кстати хороший вопрос а вот с таким запросом как быть?

select extract(month from doc_date), totalrub from dochead
group by ....

хотелось бы сделать группировку по месяцу а не под дате как
это возможно сделать, товарищ говорит что в файрбирде можно сделать
group by 1 и будет счастье... в ибейзе что-то я такого не пронаблюдал

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 12 сен 2007, 12:49

Напомни, какая у тебя версия?

basile
Сообщения: 26
Зарегистрирован: 10 июл 2005, 02:28

Сообщение basile » 12 сен 2007, 14:19

щаз стоит кажется 7.5.1.162
а что это что-то меняет?

Ответить