Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подсчет среднего  [new]
Artemoniks
Member

Откуда:
Сообщений: 8
Задача такая:

Есть таблица:

Число Город
2 Москва
4 Питер
2 Волгоград
8 Москва
12 Волгоград

Задача найти среднее по городам

Результат:
5 Москва
7 Волгоград
4 Питер

Сводится к тому что не понятно как посчитать количество строк в группировке. Например, если мы группируем по полю Город,
то как узнать что у нас сгруппировалось, например 2 Москвы, 2 Волгограда, 1 Питер ??? Реально ли это в одном запросе, или необходимо делать два запроса к этой таблице ? MS SQL SERVER 2008
13 фев 13, 12:04    [13919128]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3449
select City, count(*), avg(Number)
from dbo.Table1
group by City;
13 фев 13, 12:08    [13919169]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Artemoniks
Сводится к тому что не понятно как посчитать количество строк в группировке.

При помощи COUNT(*).
13 фев 13, 12:09    [13919182]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Artemoniks
Member

Откуда:
Сообщений: 8
AVG - то что надо! Спасибо! Еще бы как - нибудь сделать чтобы AVG не округляла до int, а возвращало бы float, это, наверное, только при помощи определения дополнительной таблицы, или есть более простые варианты ?
13 фев 13, 12:18    [13919261]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Glory
Member

Откуда:
Сообщений: 104751
Artemoniks
или есть более простые варианты ?

Тип результата avg зависит от типа его аргумента
13 фев 13, 12:19    [13919278]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Добрый Э - Эх
Guest
Artemoniks
Еще бы как - нибудь сделать чтобы AVG не округляла до int, а возвращало бы float
Как иллюстрация по теме:
select avg(num) avg_int, avg(num*1.0) avg_float 
  from (select 2 as num union all select 1)v
13 фев 13, 12:23    [13919303]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Artemoniks
Member

Откуда:
Сообщений: 8
автор
Тип результата avg зависит от типа его аргумента

Да, я знаю, поэтому единственный выход упаковать значения в DECLARE TABLE, где Number float и потом применить AVG, или есть другие варианты ?
13 фев 13, 12:23    [13919306]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Artemoniks
Member

Откуда:
Сообщений: 8
Добрый Э - Эх
Как иллюстрация по теме:
select avg(num) avg_int, avg(num*1.0) avg_float 
  from (select 2 as num union all select 1)v


Тема! Большое спасибо!!!
13 фев 13, 12:25    [13919343]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Artemoniks
Да, я знаю, поэтому единственный выход упаковать значения в DECLARE TABLE, где Number float и потом применить AVG, или есть другие варианты ?

Если хочется именно float, то
avg(cast(Number as float))
13 фев 13, 12:25    [13919344]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
.
Guest
Artemoniks,

приведением типов занимается CAST.
но и сервер неявно приводит, пример выше привели
13 фев 13, 12:25    [13919348]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет среднего  [new]
Artemoniks
Member

Откуда:
Сообщений: 8
Гость333
Artemoniks
Да, я знаю, поэтому единственный выход упаковать значения в DECLARE TABLE, где Number float и потом применить AVG, или есть другие варианты ?

Если хочется именно float, то
avg(cast(Number as float))


Спасибо!
13 фев 13, 12:27    [13919366]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить