【问题标题】:Oracle SQL - select all maximum column values from queryOracle SQL - 从查询中选择所有最大列值
【发布时间】:2020-05-03 06:34:30
【问题描述】:

假设这是我的桌子:

 Name    |  Surname      | Serial no.  | Price
-----------------------------------------------
 John    |  Smith        | A12444dW33  | 1,234 
 Paul    |  Harrison     | D2344fGGfd  | 2,5
 Richard |  Morris       | We945kfGGE  | 3
 George  |  Washington   | ssf4gt66hJ  | 7,39494

如何根据长度获取 ONE 行中每一列的实际 LONGEST 值?

我需要对每种数据类型都有效的东西 - NUMBER、VARCHAR、DATE 等。

例如表的输出应该是(序列号都是相同的长度,所以这并不重要......):

 Name    |  Surname      | Serial no.  | Price
-----------------------------------------------
 Richard |  Washington   | A12444dW33  | 7,39494

我发现的所有问题都只针对一栏,但我需要所有栏的解决方案。

【问题讨论】:

  • DATE 值都具有相同的长度...

标签: sql oracle oracle11g


【解决方案1】:

你可以使用keep:

select max(name) keep (dense_rank first order by length(name) desc),
       max(Surname) keep (dense_rank first order by length(Surname) desc),
       max(serial) keep (dense_rank first order by length(serial) desc),
       max(price) keep (dense_rank first order by length(price) desc)
from t;

【讨论】:

  • ,谢谢,我会尽快尝试。我只担心性能问题,我的实际查询处理速度很慢,这可能会使它们更慢。
  • @Lucy82 。 . .当我跟踪性能时,我发现keep 比其他替代方案更有效。
  • 太棒了,这东西超级快。但是 VARCHAR 中可能存在的空格呢,我应该在值上使用 TRIM 以防万一吗?
  • @Lucy82 。 . .如果要删除空格,请使用trim()
【解决方案2】:

你可以使用MAX( column ) KEEP ( DENSE_RANK [FIRST|LAST] ORDER BY ... ):

SELECT MAX( Name      ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Name      ) DESC ) AS Name,
       MAX( Surname   ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Surname   ) DESC ) AS Surname,
       MAX( Serial_no ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Serial_no ) DESC ) AS serial_no,
       MAX( Price     ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Price     ) DESC ) AS Price
FROM   your_table;

输出:

姓名 |姓氏 | SERIAL_NO |价钱 :-------- | :--------- | :--------- | ------: 理查德 |华盛顿 | ssf4gt66hJ | 7.39494

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2022-01-14
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2011-04-20
    相关资源
    最近更新 更多