oracle中如何选择最大长度列数据

mik*_*ang 1 oracle select group-by max string-length

我有数据如下:

No,Code,Name
1,code1,code1 name
2,code2,This name for code2
3,code3,code3 name
Run Code Online (Sandbox Code Playgroud)

我想选择记录2,我尝试了如下SQL,但出现错误ORA-00934: group function is not allowed here,我该怎么办?

select code, name from my_mst where max(length(name)) group by name;
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 5

使用子查询来确定最大长度:

SELECT code, name
FROM my_mst
WHERE LENGTH(name) = (SELECT MAX(LENGTH(name)) FROM my_mst)
Run Code Online (Sandbox Code Playgroud)

这非常适合您向我们展示的特定示例数据集。但是,它有一个限制,即如果最大名称长度相等,它将返回多个记录。如果您想使用代码等方式打破这种束缚,那么您可以考虑使用分析函数:

SELECT t.*
FROM
(
    SELECT code, name,
        ROW_NUMBER() OVER (ORDER BY LENGTH(name) DESC, code) rn
    FROM my_mst
) t
WHERE t.rn = 1;
Run Code Online (Sandbox Code Playgroud)