Как найти сумму средних значений?

Как получить одной строкой сумму по одному полю (бюджет). Но есть проблема, в таблице проекты повторяются несколько раз, только меняется контракт, а бюджет остается тот же. Когда использую order by iid (по проекту), то получаю сумму бюджетов проектов
select AVG([budg]) as iid_avg 
  from [projects] 
  where budg is not null 
  group by [iid]

и только тогда получаю таблицу проект=>бюджет. как мне теперь сложить бюджеты всех проектов?
spoiler
6152e37941d2f203647520.png
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Из того что я понял:
select sum(budget) from (
	select distinct project, budget from projects
) p;


SQL fiddle
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
бюджет остается тот же
Зачем вычислять среднее для одинаковых значений? Среднее и будет этим значением. Значит нужно брать по одной строке для каждого iid.
SELECT SUM(one_bug)
  FROM( SELECT DISTINCT iid, bugs AS one_bug FROM projects ) AS DB


Ваш вопрос — последствия нарушения нормальной формы. Подзапрос — это и есть таблица "Проект". Для контрактов нужна отдельная таблица.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы