【问题标题】:Select right percentile from joined table从连接表中选择正确的百分位数
【发布时间】:2016-11-23 22:10:25
【问题描述】:

如何根据多列中的值从连接表中选择正确的值。 我开始使用 sqlfiddle:http://sqlfiddle.com/#!9/f92daa/2 主表:

id  val
1   1
2   4
3   67
4   78
5   22

加入的表:

obs_id  perc1   perc2   perc3   perc4   perc5   perc6   perc7   perc8   perc9   perc10
1   1   2   3   4   5   6   7   8   9   10
2   1   2   3   4   5   6   7   8   9   10
3   10  20  30  40  50  60  70  80  90  100
4   10  20  30  40  50  60  70  80  90  100
5   10  20  30  40  50  60  70  80  90  100

预期结果应该是:

id  val perc
1   1   1
2   4   4
3   67  70
4   78  80
5   22  30

perc - 应该是 perc 表中的数字(由 id 连接)不大于 perc1-10 列中的最高可能值

Table perc 存储观察值的百分位数。目标是找出哪个区间达到了主表中的值并取高带。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以使用case 表达式来执行此操作。这假设 perc1

    SELECT obs.id, obs.val, 
    case when val <= perc1 then perc1 
         when val <= perc2 then perc2 
         when val <= perc3 then perc3
         when val <= perc4 then perc4 
         when val <= perc5 then perc5 
         when val <= perc6 then perc6 
         when val <= perc7 then perc7 
         when val <= perc8 then perc8 
         when val <= perc9 then perc9
         when val <= perc10 then perc10 
         end
    perc
    FROM obs
    INNER JOIN perc
    ON obs.id = perc.obs_id
    

    SQL Fiddle

    【讨论】:

      【解决方案2】:

      如果您确定perc 表将始终具有升序 顺序的值then

      select 
      a.id, a.val,
      
      case
      when b.perc1 >= a.val then b.perc1
      when b.perc2 >= a.val then b.perc2
      when b.perc3 >= a.val then b.perc3
      when b.perc4 >= a.val then b.perc4
      when b.perc5 >= a.val then b.perc5
      when b.perc6 >= a.val then b.perc6
      when b.perc7 >= a.val then b.perc7
      when b.perc8 >= a.val then b.perc8
      when b.perc9 >= a.val then b.perc9
      when b.perc10 >= a.val then b.perc10
      end as perc
      
      from idval a , perc b
      where a.id = b.obs_id
      

      【讨论】:

        猜你喜欢
        • 2011-03-05
        • 1970-01-01
        • 2014-04-25
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多