我正在使用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
答案 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