Подсчет среднего

Artemoniks
Дата: 13.02.2013 12:04:45
Задача такая:

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

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

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

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

Сводится к тому что не понятно как посчитать количество строк в группировке. Например, если мы группируем по полю Город,
то как узнать что у нас сгруппировалось, например 2 Москвы, 2 Волгограда, 1 Питер ??? Реально ли это в одном запросе, или необходимо делать два запроса к этой таблице ? MS SQL SERVER 2008
Ennor Tiegael
Дата: 13.02.2013 12:08:12
select City, count(*), avg(Number)
from dbo.Table1
group by City;
Гость333
Дата: 13.02.2013 12:09:01
Artemoniks
Сводится к тому что не понятно как посчитать количество строк в группировке.

При помощи COUNT(*).
Artemoniks
Дата: 13.02.2013 12:18:45
AVG - то что надо! Спасибо! Еще бы как - нибудь сделать чтобы AVG не округляла до int, а возвращало бы float, это, наверное, только при помощи определения дополнительной таблицы, или есть более простые варианты ?
Glory
Дата: 13.02.2013 12:19:59
Artemoniks
или есть более простые варианты ?

Тип результата avg зависит от типа его аргумента
Добрый Э - Эх
Дата: 13.02.2013 12:23:06
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
Artemoniks
Дата: 13.02.2013 12:23:28
автор
Тип результата avg зависит от типа его аргумента

Да, я знаю, поэтому единственный выход упаковать значения в DECLARE TABLE, где Number float и потом применить AVG, или есть другие варианты ?
Artemoniks
Дата: 13.02.2013 12:25:47
Добрый Э - Эх
Как иллюстрация по теме:
select avg(num) avg_int, avg(num*1.0) avg_float 
  from (select 2 as num union all select 1)v


Тема! Большое спасибо!!!
Гость333
Дата: 13.02.2013 12:25:47
Artemoniks
Да, я знаю, поэтому единственный выход упаковать значения в DECLARE TABLE, где Number float и потом применить AVG, или есть другие варианты ?

Если хочется именно float, то
avg(cast(Number as float))
.
Дата: 13.02.2013 12:25:58
Artemoniks,

приведением типов занимается CAST.
но и сервер неявно приводит, пример выше привели