Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Добрый день. Подскажите кто знает. Есть x таблиц я по каждой из них среднее значение могу посчитать а мне надо их объединить union что я и сделал ,но значения выводятся в столбик и их столько же сколько таблиц. Как мне найти среднее из них?
Ну вот например
select avg(x)
from z
Union
select avg(x)
from y
Дает так
avg(x)
avg(y)
как мне среднее из них посчитать
30 июл 11, 19:37    [11048694]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ghb
Добрый день. Подскажите кто знает. Есть x таблиц я по каждой из них среднее значение могу посчитать а мне надо их объединить union что я и сделал ,но значения выводятся в столбик и их столько же сколько таблиц. Как мне найти среднее из них?
Ну вот например
select avg(x)
from z
Union
select avg(x)
from y
Дает так
avg(x)
avg(y)
как мне среднее из них посчитать
Вам нужно среднее из средних?
Или среднее по всем значениям x всех таблиц?
30 июл 11, 19:49    [11048707]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Да мне нужно среднее из средних.
30 июл 11, 19:52    [11048711]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ghb
Да мне нужно среднее из средних.
SELECT AVG(x) FROM
(
 SELECT AVG(x) FROM z 
 UNION ALL
 SELECT AVG(x) FROM y
) T(x);
30 июл 11, 19:55    [11048715]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
iap, Спасибо большое то есть вы предлагаете загнать их внутрь на основании того что ищим одно значение из всех таблиц.
Но если у меня так. Разные значения
select avg(x)
from z
union
select avg(y)
from t
30 июл 11, 19:59    [11048724]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ghb
iap, Спасибо большое то есть вы предлагаете загнать их внутрь на основании того что ищим одно значение из всех таблиц.
Но если у меня так. Разные значения
select avg(x)
from z
union
select avg(y)
from t
Не понял.
По-другому сформулируйте?
Что имеется в виду под "разными значениями"? UNION без ALL? Но тогда нужно вовсе не "среднее"?
30 июл 11, 20:03    [11048728]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
То есть я должен написать во внешнем селекте так select avg(x+y+...)
Это не работет?
30 июл 11, 20:03    [11048731]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Union all или не просто union здесь мне не важно. Важно то как я могу объединить несколько разных значений( получены они были как avg и объединены с другими union просто) для посчета из них среднего
30 июл 11, 20:06    [11048735]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ghb
То есть я должен написать во внешнем селекте так select avg(x+y+...)
Это не работет?
Вы бы лучше ответили мне.
А не придумывали свой синтаксис.
30 июл 11, 20:06    [11048736]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Ghb
То есть я должен написать во внешнем селекте так select avg(x+y+...)
Это не работет?
Вы для начала попробуйте объяснить, что нужно получить.
30 июл 11, 20:07    [11048738]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ghb
Union all или не просто union здесь мне не важно.
Я балдею! По-Вашему, это одно и то же?
Можно выбросить из суммы сколько хочешь слагаемых, и это неважно?!
Ghb
Важно то как я могу объединить несколько разных значений( получены они были как avg и объединены с другими union просто) для посчета из них среднего
Чем не устраивает мой первый ответ?
30 июл 11, 20:09    [11048742]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Да мне не важны дубликаты для понимания я могу добавить all или убрать его поиграться с дистинктом. Вот это задача посмотрите сами. Надо найти среднюю цену по двум товарам

Use Компьютеры
select AVG(speed)
from PC inner join Product
on Product.model = pc.model
where maker = 'a'
Union
select AVG(speed)
from laptop inner join Product
on product.model = Laptop.model
where maker = 'a'
Выдает
537
606
Мне надо среднюю взять из них
30 июл 11, 20:19    [11048765]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Может и правильно у вас все - я мог не разобраться). Кстати а что такое у вас вконце запроса T(x) ? это я не понял
30 июл 11, 20:22    [11048771]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Ghb
Да мне не важны дубликаты для понимания я могу добавить all или убрать его поиграться с дистинктом. Вот это задача посмотрите сами. Надо найти среднюю цену по двум товарам

Use Компьютеры
select AVG(speed)
from PC inner join Product
on Product.model = pc.model
where maker = 'a'
Union
select AVG(speed)
from laptop inner join Product
on product.model = Laptop.model
where maker = 'a'
Выдает
537
606
Мне надо среднюю взять из них
Вам iap написал сразу запрос.
30 июл 11, 20:24    [11048775]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Ghb
Кстати а что такое у вас вконце запроса T(x) ? это я не понял
Этьо такой расширенный синтаксис появился.

Я предпочитаю писать:
SELECT AVG(x) FROM
(
 SELECT AVG(x) as x FROM z 
 UNION ALL
 SELECT AVG(x) as x FROM y
) as T
30 июл 11, 20:25    [11048778]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Хорошо спасибо большое, я понял как сделать.
30 июл 11, 20:26    [11048780]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
А как найти просто среднее по всем значениям из двух таблиц?
30 июл 11, 20:35    [11048807]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
alexeyvg
Ghb
Кстати а что такое у вас вконце запроса T(x) ? это я не понял
Этьо такой расширенный синтаксис появился.

Я предпочитаю писать:
SELECT AVG(x) FROM
(
 SELECT AVG(x) as x FROM z 
 UNION ALL
 SELECT AVG(x) as x FROM y
) as T
Это не расширенный синтаксис. Это было и в ANSI SQL-92
http://savage.net.au/SQL/sql-92.bnf.html#correlation specification
Что-то пробел между "correlation" и "specification" в этой ссылке всё дело портит... :(

Имя колонки UNIONа задаёт первый SELECT.
Поэтому в последующих SELECTах его можно не задавать.
30 июл 11, 20:40    [11048826]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Ghb
А как найти просто среднее по всем значениям из двух таблиц?
SELECT AVG(x) FROM
(
 SELECT x FROM z 
 UNION ALL
 SELECT x FROM y
) T(x);
30 июл 11, 20:41    [11048829]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Ghb
Guest
Спасибо большое все понятно и работает. Удачи вам
30 июл 11, 20:54    [11048859]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
step_ks
Member

Откуда:
Сообщений: 936
Ghb
Вот это задача посмотрите сами. Надо найти среднюю цену по двум товарам

Use Компьютеры
select AVG(speed)
from PC inner join Product
on Product.model = pc.model
where maker = 'a'
Union
select AVG(speed)
from laptop inner join Product
on product.model = Laptop.model
where maker = 'a'
Выдает
537
606
Мне надо среднюю взять из них

sql-ex детектед
30 июл 11, 21:12    [11048913]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
Raoul
Member

Откуда:
Сообщений: 177
Ghb
Use Компьютеры
select AVG(speed)
from PC inner join Product
on Product.model = pc.model
where maker = 'a'
Union
select AVG(speed)
from laptop inner join Product
on product.model = Laptop.model
where maker = 'a'
Выдает
537
606
Мне надо среднюю взять из них

Не понял - то есть если в таблице PC 1000 записей по средней цене 537, а в laptop - одна запись с ценой 606, то все равно требуется (537+606)/2?
1 авг 11, 10:50    [11051648]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
iap
Это не расширенный синтаксис. Это было и в ANSI SQL-92
http://savage.net.au/SQL/sql-92.bnf.html#correlation specification
Понятно, спасибо.

Но всё равно так неудобно. Получается, имена полей установливаются по порядковому номеру. Трудно будет считать постоянно.

Если есть есть несколько запросов, в них по несколько полей; получается, нужно выписать на бумажку список из T(x) (потому что на экран это выражение вместе с запросом не поместится), и потом читать запрос, поглядывая на список.
iap
Имя колонки UNIONа задаёт первый SELECT.
Поэтому в последующих SELECTах его можно не задавать.
Это само собой, но стараюсь везде задать имена, чтобы потом легче было читать запросы. Опять же на примере выше - опять придётся на бумажку выписывать поля :-)
1 авг 11, 11:58    [11052032]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
step_ks
Member

Откуда:
Сообщений: 936
alexeyvg
Но всё равно так неудобно. Получается, имена полей установливаются по порядковому номеру. Трудно будет считать постоянно.
Это да. А вот в insert ... select нам не дали выбора - все равно приходится считать поля по номеру.
А ведь можно было бы сделать синтаксис как у апдейт!
1 авг 11, 12:06    [11052089]     Ответить | Цитировать Сообщить модератору
 Re: Как посчитать среднее значение по 2 и более union  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
alexeyvg
iap
Это не расширенный синтаксис. Это было и в ANSI SQL-92
http://savage.net.au/SQL/sql-92.bnf.html#correlation specification
Понятно, спасибо.

Но всё равно так неудобно. Получается, имена полей установливаются по порядковому номеру. Трудно будет считать постоянно.
Полный аналог такому синтаксису:
CREATE VIEW V(F1,F2,F3) AS SELECT A,B,C FROM T WHERE X=128;
Или
WITH CTE(F1,F2,F3) AS(SELECT A,B,C FROM T WHERE X=128) SELECT * FROM CTE;
Иногда удобно - все наименования полей прямо в скобках рядом с наименованием табличного источника данных.
Иначе эти имена полей надо выискивать внутри самого подзапроса (не всегда форматированного, а зачастую очень запутанного ).
1 авг 11, 12:23    [11052217]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить