4
我有表結構,如:查找列中的最大值爲每個分區
CREATE TABLE new_test
(col1 NUMBER(2) NOT NULL,
col2 VARCHAR2(50) NOT NULL,
col3 VARCHAR2(50) NOT NULL,
col4 VARCHAR2(50) NOT NULL
);
它具有數據:
col1 col2 col3 col4
0 A B X
1 A B Y
2 A B Z
1 C D L
3 C D M
我需要找到COL4這對組合的最大價值的價值col2和col3。例如我的結果應該是:
col4
Z
M
我試圖使用Oracle分析功能:
SELECT col4, MAX(col1) OVER (PARTITION BY col2, col3) FROM (
SELECT col2, col3, col4, col1
FROM new_test);
但預期它不工作。你能幫我解決這個問題嗎?
更新: 我可以使它工作使用:
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;
是否有比這更好的辦法?
親愛的Sylvain,非常感謝。與我的相比,您的查詢相當容易閱讀。但我觀察到兩種查詢的性能都是一樣的。有沒有更好的/高性能的方法? – user613114 2014-09-27 03:30:42
@ user613114關於表演:我的第一個嘗試是在col2,col3,col4上添加一個複合索引。但是,如果不知道你的表格結構(「鍵」)和執行計劃,就很難說更多。隨意爲此提出一個其他問題! – 2014-09-27 10:16:18
謝謝Sylvain的幫助。我去做。 – user613114 2014-09-29 05:13:34