第二高的专栏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二高的专栏相关的知识,希望对你有一定的参考价值。

我看到一个类似的问题问How to get second highest value among multiple columns in SQL ...但是该解决方案不适用于Microsoft Access(Row_Number / Over Partition在Access中无效)。

我的Access查询包含许多字段。我想创建一个新的字段/列,它将返回查询中包含的10个特定列的第二个最高值,我将此字段称为“Cover”。像这样的东西:

    Product  Bid1    Bid2   Bid3   Bid4  Cover
    Watch    104     120    115    108   115
    Shoe     65      78     79     76    18
    Hat      20      22     19     20    20

我可以做一个非常长的SWITCH公式,如下面的等效Excel公式:

IF( AND(Bid1> Bid2, Bid1 > Bid3, Bid1 > Bid4), Bid1, 
    AND(Bid2> Bid1, Bid2 > Bid3, Bid2 > Bid4), Bid2,
    .....

但必须有一个更有效的解决方案。如果MS-Access Query具有这样的功能,那么MAXIF等价物将完美地工作。

有任何想法吗?先感谢您。

答案

如果数据以更多的normalized way布局,这将更容易。线索是编号的字段名称。

您的数据目前被组织为Pivot(在Access中称为crosstab),但很容易就是Unpivoted

如果以更规范化的方式放置,这些数据将更容易使用,这种情况将是:

  Product   Bid   Amount  
 --------- ----- -------- 
  Watch       1      104  
  Watch       2      120  
  Watch       3      115  
  Watch       4      108  
  Shoe        1       65  
  Shoe        2       78  
  Shoe        3       79  
  Shoe        4       76  
  Hat         1       20  
  Hat         2       22  
  Hat         3       19  
  Hat         4       20  

这种方式查询变得更简单。

看起来您想要按产品分组的最高出价,因此:

select Product, max(amount) as maxAmount
from myTable 
group by product

实际上,我们不应该存储文本字段,因此Product应该是一个ID号,相关的产品名称在一个单独的表中存储一次,而不是在这个中存储几次,如:

  ProdID   ProdName  
 -------- ---------- 
    1       Watch     
    2       Shoe      
    3       Hat       

......但那是另一个教训。

一般来说,应该避免重复任何事情......这几乎就是数据库的目的......但下面的链接将解释为I. :)


以上是关于第二高的专栏的主要内容,如果未能解决你的问题,请参考以下文章

176. 第二高的薪水

LeetCode176——第二高的薪水

LeetCode--176--第二高的薪水

LeetCode - 176. 第二高的薪水

力扣——第二高的薪水(数据库的题

leetcode(176)第二高的薪水