Как такой запрос делается ?
От: KGP http://kornilow.newmail.ru
Дата: 23.12.03 15:06
Оценка:
есть три таблицы с полем field1 double
select avg(field1) по всем трём таблицам ... ?
без временных таблиц соответственно, используя union ...
... << RSDN@Home 1.1.0 stable >>
Re: Как такой запрос делается ?
От: GarryIV  
Дата: 23.12.03 15:57
Оценка: :)
Здравствуйте, KGP! Вы писали:

K> есть три таблицы с полем field1 double

K> select avg(field1) по всем трём таблицам ... ?
K> без временных таблиц соответственно, используя union ...

Была такая идея

SELECT AVG(FIELD1) FROM
(
    SELECT FIELD1 FROM TABLE1
    UNION
    SELECT FIELD1 FROM TABLE2 
    UNION
    SELECT FIELD1 FROM TABLE3
) AS D


но сервер отказался такое кушать... А иначе одним запросом вроде никак...
Posted via RSDN NNTP Server 1.8 beta
WBR, Igor Evgrafov
Re[2]: Как такой запрос делается ?
От: Alex.Che  
Дата: 23.12.03 16:05
Оценка: 27 (2) :)
Привет, GarryIV!
Вы пишешь 23 декабря 2003:

G> Была такая идея


G>
 G> SELECT AVG(FIELD1) FROM
 G> (
 G>     SELECT FIELD1 FROM TABLE1
 G>     UNION
 G>     SELECT FIELD1 FROM TABLE2
 G>     UNION
 G>     SELECT FIELD1 FROM TABLE3
 G> ) AS D
 G>

G> но сервер отказался такое кушать... А иначе одним запросом вроде никак...

Считай по каждой таблице COUNT и SUM
AVG = SUM / COUNT

--
With best regards, Alex Cherednichenko.
Posted via RSDN NNTP Server 1.8 beta
Re[2]: Как такой запрос делается ?
От: Merle Австрия http://rsdn.ru
Дата: 23.12.03 18:19
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>но сервер отказался такое кушать... А иначе одним запросом вроде никак...

Какой сервер-то? И почему кушать отказался?
MSSQL это слямзил в три секунды.
... [RSDN@Home 1.1.0 stable]
Мы уже победили, просто это еще не так заметно...
Re: Как такой запрос делается ?
От: camel Россия  
Дата: 24.12.03 05:18
Оценка:
select avg(field1)
from
(
(select field1 from t1) union all
(select field1 from t2) union all
(select field1 from t3)
)

я тебе ответил как это сделать в оракле, а вообще не помещало бы указать базу
Re[3]: Как такой запрос делается ?
От: KGP http://kornilow.newmail.ru
Дата: 24.12.03 07:59
Оценка:
Здравствуйте, Merle, Вы писали:

SELECT AVG(FIELD1) FROM
(
SELECT FIELD1 FROM TABLE1
UNION
SELECT FIELD1 FROM TABLE2
UNION
SELECT FIELD1 FROM TABLE3
)

лажает ...
все верно ... я пробовал без ... AS D
а как это обосновать ? что гуру скажут (внутренние заморочки MS SQL Server или SQL стандарта)
... << RSDN@Home 1.1.0 stable >>
Re[3]: Как такой запрос делается ?
От: GarryIV  
Дата: 24.12.03 08:31
Оценка:
Здравствуйте, Merle! Вы писали:

GIV>> но сервер отказался такое кушать... А иначе одним запросом вроде

GIV>> никак...
M> Какой сервер-то?

IBM AS/400 DB2 5.2

M> И почему кушать отказался?


=========Beginning of the citation==============
Cause . . . . . : The keyword UNION was not expected here. A syntax error
was detected at keyword UNION. The partial list of valid tokens is ). This
list assumes that the statement is correct up to the unexpected keyword.
The error may be earlier in the statement but the syntax of the statement
seems to be valid up to this point.
=========The end of the citation================


M> MSSQL это слямзил в три секунды.


В расчете на это и запостил.
Posted via RSDN NNTP Server 1.8 beta
WBR, Igor Evgrafov
Re[4]: Как такой запрос делается ?
От: Merle Австрия http://rsdn.ru
Дата: 24.12.03 11:13
Оценка:
Здравствуйте, KGP, Вы писали:

KGP>все верно ... я пробовал без ... AS D

KGP>а как это обосновать ? что гуру скажут (внутренние заморочки MS SQL Server или SQL стандарта)
Стандарта, да и вообще реляционной теории.
Выражение (select...) является вполне самостоятельной таблицей, пусть и существуящей только на время запроса. Надо же ее как-то именовать?
Поскольку своего имени нет, то в данном случае наличие алиаса является обязательным требованием.
Помоему это достаточно ясно описано в документации.
Мы уже победили, просто это еще не так заметно...
Re[5]: Как такой запрос делается ?
От: KGP http://kornilow.newmail.ru
Дата: 24.12.03 11:35
Оценка:
Здравствуйте, Merle, Вы писали:

M>Выражение (select...) является вполне самостоятельной таблицей, пусть и существуящей только на время запроса. Надо же ее как-то именовать?

зачем ?
M>Поскольку своего имени нет, то в данном случае наличие алиаса является обязательным требованием.
M>Помоему это достаточно ясно описано в документации.
Где ... это не придирка с моей стороны ...
M>Стандарта, да и вообще реляционной теории.
Сомнения у меня по поводу стандарста SQL ... вот camel писал, что
select avg(field1)
from
(
(select field1 from t1) union all
(select field1 from t2) union all
(select field1 from t3)
)

у Oracle работает ... без as D

в тоже время IBM AS/400 DB2 5.2 тоже нюанс имеет ...
... << RSDN@Home 1.1.0 stable >>
Re[6]: Как такой запрос делается ?
От: Merle Австрия http://rsdn.ru
Дата: 24.12.03 12:17
Оценка:
Здравствуйте, KGP, Вы писали:

KGP>зачем ?

Чтобы отличать от других таблиц в запросе.

M>>Стандарта, да и вообще реляционной теории.

KGP>Сомнения у меня по поводу стандарста SQL ...

ANSI SQL 92:

Format

<table reference> ::=
<table name> [ [ AS ] <correlation name>
[ <left paren> <derived column list> <right paren> ] ]
| <derived table> [ AS ] <correlation name>
[ <left paren> <derived column list> <right paren> ]
| <joined table>

Мы уже победили, просто это еще не так заметно...
Re[7]: Как такой запрос делается ?
От: KGP http://kornilow.newmail.ru
Дата: 24.12.03 12:32
Оценка:
Здравствуйте, Merle, Вы писали:

M>Чтобы отличать от других таблиц в запросе.

1) В предложенном не было других таблиц
2) символ [ — опционально ... может быть и может не быть, то почему не работает без него ?
... << RSDN@Home 1.1.0 stable >>
Re[8]: Как такой запрос делается ?
От: Merle Австрия http://rsdn.ru
Дата: 24.12.03 12:45
Оценка:
Здравствуйте, KGP, Вы писали:

KGP>Здравствуйте, Merle, Вы писали:


M>>Чтобы отличать от других таблиц в запросе.

KGP>1) В предложенном не было других таблиц
Но они могли быть. Необязательными являются только те ключевые слова и параметры, которые не при каких обстоятельствах не могут потребоваться.

KGP>2) символ [ — опционально ... может быть и может не быть, то почему не работает без него ?

Ну я же специально выделил!
После <derived tables> (подзапрос), <correlation name> (алиас) в квадратные скобочки не взят, то есть является обязательным параметром.
<correlation name> взят в "[]", только после обычной таблицы.
Мы уже победили, просто это еще не так заметно...
Re[9]: Как такой запрос делается ?
От: KGP http://kornilow.newmail.ru
Дата: 08.01.04 12:49
Оценка:
Здравствуйте, Merle, Вы писали:

Тогда почему
работает такое:

select * from (select * from t1
union
select * from t2
order by [f1])
... << RSDN@Home 1.1.0 stable >>
Re[10]: Как такой запрос делается ?
От: Merle Австрия http://rsdn.ru
Дата: 08.01.04 13:06
Оценка:
Здравствуйте, KGP, Вы писали:

KGP>Тогда почему работает такое:

Где? в MSSQL такое не работает аж по 2м причинам и одна из них — отсутствие алиаса.

А впрочем не важно. По стандарту такое работать не должно, но на 100% стандарт не соблюдает никто.

P. S.
Если ты хочешь изменить уже поставленную оценку, то есть кнопка "удалить оценку"
... [RSDN@Home 1.1.0 stable]
Мы уже победили, просто это еще не так заметно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.