[英]How to Select the Max Value after a Count in Oracle?
I have a query: 我有一个问题:
SELECT
CST_CON_ID as ID_USER,
X_TYPE_FOURTH_LVL as ELEMENT_TYPE,
COUNT(X_TYPE_FOURTH_LVL) as T_REPEAT
FROM
SIEBEL.S_SRV_REQ
GROUP BY
CST_CON_ID,
X_TYPE_FOURTH_LVL
ORDER BY
CST_CON_ID;
Which returns the following information when run: 运行时返回以下信息:
ID_USER ELEMENT_TYPE T_REPEAT
1-1HQR-1380 REPOSITION 3
1-1HQR-1380 CANCELED 4
1-1HQR-1380 INFORMATION 1
1-1HQR-1380 SELLS 90
1-1HQR-1380 PROMOTIONS 3
1-1HQR-1380 ACCOUNTS 5
1-1HQR-1250 ACTIONS 34
1-1HQR-1250 PROG 60
1-1HQR-1250 INFORMATION 3
1-1HQR-1560 SELLS 40
1-1HQR-1560 BUYS 2
1-1HQR-1560 REPOSITION 1
1-1HQR-1560 PROMOTIONS 70
But now I want only to extract for each ID_USER
the max value of T_REPEAT
. 但现在我只想提取每个
ID_USER
的最大值T_REPEAT
。 The expected output I want would look like this: 我想要的预期输出看起来像这样:
ID_USER ELEMENT_TYPE T_REPEAT
1-1HQR-1380 SELLS 90
1-1HQR-1250 PROG 60
1-1HQR-1560 PROMOTIONS 70
Is it possible to get this output using only a single query? 是否可以仅使用一个查询获得此输出?
One option is to use of row_number()
: 一种选择是使用
row_number()
:
SELECT ID_USER, ELEMENT_TYPE, T_REPEAT
FROM (SELECT CST_CON_ID as ID_USER, X_TYPE_FOURTH_LVL as ELEMENT_TYPE,
COUNT(X_TYPE_FOURTH_LVL) as T_REPEAT,
ROW_NUMBER() OVER (PARTITION BY CST_CON_ID ORDER BY COUNT(X_TYPE_FOURTH_LVL) DESC) AS Seq
FROM SIEBEL.S_SRV_REQ
GROUP BY CST_CON_ID, X_TYPE_FOURTH_LVL
) t
WHERE Seq = 1;
EDIT : If you have a ties with count then use dense_rank()
function instead : 编辑:如果你有计数的关系,那么使用
dense_rank()
函数代替:
Wrap the current statement in a subquery. 将当前语句包装在子查询中。
SELECT ID_USER, ELEMENT_TYPE, MAX(T_REPEAT)
FROM (
SELECT
CST_CON_ID as ID_USER,
X_TYPE_FOURTH_LVL as ELEMENT_TYPE,
COUNT(X_TYPE_FOURTH_LVL) as T_REPEAT
FROM
SIEBEL.S_SRV_REQ
GROUP BY
CST_CON_ID,
X_TYPE_FOURTH_LVL
ORDER BY
T_REPEAT
)
GROUP BY ID_USER
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.