使用SQL从列中查找最大值?

时间:2018-02-15 14:25:26

标签: sql oracle

我正在使用SQL,其中列的值为

A B
X1 2 4 6 8 10
X2 2 33 44 56 78 98 675 891 11111
X3 2 4 672 234 2343 56331
X4 51 123 232 12 12333

我想要一个查询来获取col B的值,其中col A具有最大值的值。输出应该是

x2  2 33 44 56 78 98 675 891 11111

我使用的查询:

select max(B) from table

结果

51 123 232 12 12333

2 个答案:

答案 0 :(得分:4)

假设两列都是字符串,并且列B使用单个空格用于分隔符而没有前导/尾随空格,则可以使用此方法:

SELECT A, B
FROM MyTable
ORDER BY DESC LENGTH(B)-LENGTH(REPLACE(B, ' ', ''))
FETCH FIRST 1 ROW ONLY

此解决方案的核心是LENGTH(B)-LENGTH(REPLACE(B, ' ', ''))表达式,它计算字符串B中的空格数。

注意: FETCH FIRST N ROWS ONLY是Oracle-12c语法。对于早期版本,请使用this answer中描述的ROWNUM方法。

答案 1 :(得分:1)

如果有多个分隔空间或多个分隔空间,则一行符合条件,请执行以下操作:使用regexp_count()计算每行中的空格数(或空格组)。使用rank查找大多数(组)空格。仅采用排名为1的行:

<强> demo

select *
  from (select t.*, rank() over (order by regexp_count(b, ' +') desc) rnk from t)
  where rnk = 1