Sybase SQL: получение суммы больше максимальной

Извините, эта проблема настолько уникальна, что я не смог придумать лучшего названия.

У меня есть таблица в следующем виде:

--------EXAMPLE---------------------------------------------------------
Cat1           Cat2          Value
a              e1            113
b              e1            14
a              e2            15
c              e3            13
a              e1            13
a              e2            11
c              e4            1

Для каждого отдельного значения в Cat1 я хочу найти максимум значений, сгруппированных по Cat2, а затем суммировать их.

Итак, для приведенной выше таблицы для Cat1 = 'a'

Шаг 1: я хочу извлечь следующие строки:

Cat1           Cat2          Value
a              e1            113
a              e2            15
a              e1            13
a              e2            11

Шаг 2: Я хочу извлечь максимум, соответствующий Cat2:

Cat1           Cat2          Value
a              e1            113
a              e2            15

Шаг 3: Суммируйте значение, чтобы получить:

Cat1           SumOfValueColumn
a              128
b              14
c              14

Я могу сделать это в несколько шагов, но я хочу добиться этого за один шаг. Я использую Сибэйс.

Спасибо


person Zanam    schedule 25.01.2013    source источник


Ответы (3)


-- Создайте представление, которое не занимает больше места в базе данных.

create view max_cat_tbl_view
( Cat1, Cat2, Maxvalue ) as 
select Cat1, Cat2, max(Value) 
from cat_tbl 
group by Cat1, Cat2
go

-- Запросить представление, чтобы получить сумму больше максимальной

select Cat1, sum(Maxvalue) from max_cat_tbl_view group by Cat1 order by Cat1
go

Хороший SQL, спокойной ночи. келли805

person kelley805    schedule 31.01.2013

- Предыдущий ответ можно было бы сделать за один шаг, удалив переход посередине. -- Вот еще один ответ с использованием временных таблиц Sybase

select Cat1, Cat2, max(Value) Maxvalue
into   #max_cat_tbl
from   cat_tbl
group by Cat1, Cat2  order by 1, 2
select Cat1, sum(Maxvalue) from #max_cat_tbl group by Cat1 order by Cat1
drop table #max_cat_tbl
go
person kelley805    schedule 31.01.2013

Используйте следующий запрос: -

SELECT cat1,sum(Value) as sum_Value FROM (SELECT cat1,cat2,max(Value) as Value FROM #tmp1 group by cat1,cat2 ) d1 GROUP BY cat1

person Gopal Sanodiya    schedule 01.02.2013