use*_*114 4 oracle max analytic-functions partition-by
我有表结构,如:
CREATE TABLE new_test
( col1 NUMBER(2) NOT NULL,
col2 VARCHAR2(50) NOT NULL,
col3 VARCHAR2(50) NOT NULL,
col4 VARCHAR2(50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
它有数据:
col1 col2 col3 col4
0 A B X
1 A B Y
2 A B Z
1 C D L
3 C D M
Run Code Online (Sandbox Code Playgroud)
我需要找到col4的值,它对col2和col3的组合具有最大值.例如我的结果应该是:
col4
Z
M
Run Code Online (Sandbox Code Playgroud)
我尝试使用oracle分析函数:
SELECT col4, MAX(col1) OVER (PARTITION BY col2, col3) FROM (
SELECT col2, col3, col4, col1
FROM new_test);
Run Code Online (Sandbox Code Playgroud)
但它没有按预期工作.你能帮我解决这个问题吗?
更新:我可以使用:
SELECT a.col4
FROM new_test a,
(SELECT col2,
col3,
col4,
MAX(col1) OVER (PARTITION BY col2, col3) AS col1
FROM new_test
) b
WHERE a.col2 = b.col2
AND a.col3 = b.col3
AND a.col4 = b.col4
AND a.col1 = b.col1;
Run Code Online (Sandbox Code Playgroud)
还有比这更好的方法吗?
如果您期望得到结果:
col4
Z
M
Run Code Online (Sandbox Code Playgroud)
你应该写:
SELECT MAX(col4) AS col4 FROM new_test GROUP BY col2,col3
Run Code Online (Sandbox Code Playgroud)
这将返回col4每列中的列中找到的最大值col2,col3
如果你需要:
COL2 COL3 COL4
A B Z
C D M
Run Code Online (Sandbox Code Playgroud)
写:
SELECT col2,col3,MAX(col4) AS col4 FROM new_test GROUP BY col2,col3
Run Code Online (Sandbox Code Playgroud)
最后,如果您需要:
COL1 COL2 COL3 COL4
2 A B Z
3 C D M
Run Code Online (Sandbox Code Playgroud)
有很多变化.像这个:
SELECT col1,col2,col3,col4
FROM new_test
NATURAL JOIN (SELECT col2,col3,MAX(col4) AS col4
FROM new_test GROUP BY col2,col3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |