Использование Max () в SUM () Агрегатная функция в Oracle - PullRequest
3 голосов
/ 03 декабря 2011

Я пытаюсь написать запрос в Oracle, который будет возвращать pub_id и максимальный общий доход из таблицы заголовков, в которой указаны pub_id, sales, price. Я могу получить либо список с pub_id и общий доход для каждого pub_id с

 SELECT PUB_ID, SUM(SALES*PRICE) as TotalRevenue FROM TITLES GROUP BY PUB_ID;

Или я могу получить только МАКС (Цена продажи *) с

 SELECT MAX(SUM(sales*price)) FROM titles GROUP BY pub_id;

Какие-нибудь идеи, как я могу получить pub_id с максимальным общим доходом?

Ответы [ 4 ]

2 голосов
/ 03 декабря 2011

Вы можете использовать функцию ранга следующим образом

select * from
(
select a.*,rank() over (order by sum_sales desc) r from
(
select pub_id,sum(sales*price) sum_sales from titles group by pub_id
) a
)
where r = 1;    
1 голос
/ 03 декабря 2011

Это просто с мощными ORACLE ANALYTICAL FUNCTIONS

Ниже приведен максимальный доход для каждого pub_id.

  select pub_id,REV from 
   (
   select pub_id, (sales*price) as REV,
   max(sales*price) over (partition by pub_id order by 1) as MAX 
   from titles
   )
   where REV=MAX

Если вы хотите определитьpub_id с максимальной выручкой:

   select * from
   (
   select pub_id,REV from 
   (
   select pub_id, (sales*price) as REV,
   max(sales*price) over (partition by pub_id order by 1) as MAX 
   from titles
   )
   where REV=MAX order by MAX desc
   )
   where rownum<2
0 голосов
/ 11 декабря 2015
SELECT PUB_ID, SUM(SALES*PRICE) as TotalRevenue 
FROM TITLES 
GROUP BY PUB_ID
HAVING SUM(SALES*PRICE) = ( SELECT MAX(SUM(SALES*PRICE)) 
                            FROM TITLES 
                            GROUP BY PUB_ID );
0 голосов
/ 03 декабря 2011

В этом случае нет необходимости в аналитических функциях.Наилучшим вариантом будет сгруппировать два раза по одному для суммы () и следующий раз для максимального () с параметром dens_rank .

select max(pub_id) keep (dense_rank last order by TotalRevenue)
from (
        SELECT PUB_ID, SUM(SALES*PRICE) as TotalRevenue 
        FROM TITLES 
        GROUP BY PUB_ID
    )
...