我有一个名为RXData的表,它有3个可能的测量值,称为runFactors。这是表格的结构:
year, compound, primary_runfactor sec_run_factor, qual_factor
2015 RX1 0.12 0.22 1.3
2015 RX1 0.33 0.22 1.3
2015 RX1 0.12 0.22 1.3
2016 RX2 0.12 0.22 1.4
2016 RX2 0.12 0.22 1.4
2016 RX2 0.12 0.22 1.6
2016 RX2 0.12 0.22 1.7
查询的目标是按复合和年份对数据进行分组,然后找到最佳的runFactors。选择runFactors的规则如下:
Choose the maximum primary_run_factor of the group
If there is a maximum value, select that row
else if there is no maximum primary_run_factor
Select the maximum sec_run_factor
if there is a maximum sec_run_factor, select that row
else if there is no maximum sec_run_factor
then Select the maximum qual_factor
if there is a maximum qual_factor, select that row
else select a random qual_factor for the group
如果没有最大的qual_factor,请为该组选择一个随机的qual_factor。
例如,按年份排列的组和2015年的复合RX1将具有以下行:
2015 RX1 0.12 0.22 1.3
2015 RX1 0.33 0.22 1.3
2015 RX1 0.12 0.22 1.3
根据上述规则,该组的最大primary_run_factor将为0.33,因此我们选择第2行。
对于组2016,复合RX2,行如下: 2016 RX2 0.12 0.22 1.4 2016 RX2 0.12 0.22 1.4 2016 RX2 0.12 0.22 1.6 2016 RX2 0.12 0.22 1.7
所有4行的最大primary_run_factor相同,因此我们比较最大sec_run_factor。它们也是一样的。接下来我们比较最大的qual_factor并找到最大值为1.7,所以我们选择第4行。我能够通过使用group by来编写各个查询,但是将它们放在一起以使用指定的规则是挑战。我很感激帮助解决这个问题。下面的查询找到了案例的最大runFactors。这就是把问题全部放在一起。
select compound,year,max(primary_run_factor)
from RXData
group by compound,year
select compound,year,max(sec_run_factor)
from RXData
group by compound,year
select compound,year,max(qual_factor)
from RXData
group by compound,year
//Select a random row
select year,compound,qual_factor from
( select year,compound,qual_factor from RXData
order BY dbms_random.value
) as rand_row
group by rand_row.year,rand_row.compound
where rownum = 1