簡體   English   中英

11g Oracle聚合SQL查詢

[英]11g Oracle aggregate SQL query

您能否幫我查詢這種情況。 在以下情況下,它應該返回我A = 13的單行,因為A列中的13,14出現次數最多,而B(30)的值在13時更大。我們對A的最大出現次數感興趣,並且如果平局B應該出現被認為是決勝局。

A   B
13  30
13  12
14  10
14  25
15  5

在以下情況下,如果一次出現A(全部並列),則應返回14,B的最大值為40。

A   B
13  30
14  40
15  5

用例-我們接到公司客戶的電話。 我們有興趣了解在一天中的什么時間撥打最多的電話,以及在出現平局的情況下-哪個最繁忙的時間通話時間最長。

進一步的問題

對此還有其他疑問。 我想使用以下兩種解決方案中的任一種-來自@GurV的'11g或更低版本或來自@mathguy的'dense_rank'在下面的較大查詢中我該怎么做。

    SELECT dv.id , u.email , dv.email_subject AS headline , dv.start_date , dv.closing_date, b.name AS business_name, ls.call_cost, dv.currency,
    SUM(lsc.duration) AS duration,  COUNT(lsc.id) AS call_count, ROUND(AVG(lsc.duration), 2) AS avg_duration 
    -- max(extract(HOUR from started )) keep (dense_rank last order by count(duration), max(duration)) as most_popular_hour
    FROM deal_voucher dv
        JOIN lead_source ls ON dv.id = ls.deal_id
        JOIN lead_source_call lsc ON ls.PHONE_SID = lsc.phone_number_id
        JOIN business b ON dv.business_id = b.id
        JOIN users u ON b.id = u.business_id
        AND TRUNC(dv.closing_date) = to_date('13-01-2017', 'dd-mm-yyyy')
        AND lsc.status = 'completed' and lsc.duration >= 30
    GROUP BY dv.id , u.email , dv.email_subject , dv.start_date , dv.closing_date, b.name, ls.call_cost, dv.currency
--, extract(HOUR from started )

如果12c +,請嘗試

select a
from t
group by a
order by count(*) desc, max(b) desc
fetch first 1 row only;

如果11g或更低:

select * from (
    select a
    from t
    group by a
    order by count(*) desc, max(b) desc
) where rownum = 1;

請注意,如果兩個或多個A的值相等且最大值相等,則將提取其中任何一個。

這是一個將在較舊版本中運行的查詢(無fetch子句),並且不需要子查詢。 它使用第first/last功能。 如果同時使用“ count by A”和“ max(B)的值”進行平局,則它僅選擇具有最大A值的行。您可以將其更改為min(A) ,甚至改為sum(A) (盡管這在您的問題中可能沒有任何意義)或LISTAGG(A, ',') WITHIN GROUP (ORDER BY A)以逗號分隔的第一位A列表,但這需要11.2(我相信)。

select   max(a) keep (dense_rank last order by count(b), max(b)) as a
       , max(max(b)) keep (dense_rank last order by count(b))    as b
from     inputs
group by a
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM