2017-06-13 23 views
0

選擇最大長度列數據我有數據如下:如何在Oracle

No,Code,Name 
1,code1,code1 name 
2,code2,This name for code2 
3,code3,code3 name 

我想選擇記錄2,我試過SQL如下,但我得到的錯誤ORA-00934: group function is not allowed here,我能做些什麼?

select code, name from my_mst where max(length(name)) group by name; 

回答

2

使用子查詢,以確定最大長度:

SELECT code, name 
FROM my_mst 
WHERE LENGTH(name) = (SELECT MAX(LENGTH(name)) FROM my_mst) 

這將與特定的樣本數據集,你給我們很好地工作。但是,它有一個限制,即它會返回多個記錄,如果有最大名稱長度的平局。如果你想使用,打破這種領帶例如,代碼,那麼你可以考慮使用分析功能:

SELECT t.* 
FROM 
(
    SELECT code, name, 
     ROW_NUMBER() OVER (ORDER BY LENGTH(name) DESC, code) rn 
    FROM my_mst 
) t 
WHERE t.rn = 1; 
+0

前者是好的,但我不知道是什麼意思大約領帶,後有如下錯誤「ORA -00923:在預期的位置找不到FROM關鍵字'。 – mikezang

+0

@mikezang重新載入您的頁面,正如@Oto指出的那樣,我忽略爲我的查詢添加一個「FROM」子句。 –

+0

所以這會和你以後的一樣,是嗎? 'select * from(SELECT code,name,length(name)FROM my_mst WHERE LENGTH(name)=(SELECT MAX(LENGTH(name))FROM my_mst)by code)其中rownum = 1;' – mikezang