Oracle 从四个字段(列)中的两个字段中选择顶部(最大)金额
我有这个疑问Oracle 从四个字段(列)中的两个字段中选择顶部(最大)金额,oracle,Oracle,我有这个疑问 SELECT code, username, week1money, week2money, week3money, week4money FROM( --subquery goes here ) 如何选择前两周,即具有最高值的周?我想准确地总结前两周的情况。回答我的问题 select * from( select * from( select week1money col from dual union select week2money col f
SELECT code, username, week1money, week2money, week3money, week4money FROM(
--subquery goes here
)
如何选择前两周,即具有最高值的周?我想准确地总结前两周的情况。回答我的问题
select * from(
select * from(
select week1money col from dual
union
select week2money col from dual
union
select week3money col from dual
union
select week4money col from dual
) order by col desc
) where rownum < 3
使用GREATESTS也可能有帮助。如果我理解正确,您希望每个代码都有两个顶级值,用户名行和代码,用户名是记录集的键。 假设您可以有两个具有相同值的前两周,并且没有空值,这可能是解决方案之一:
SQL> with t (id, code, week1, week2, week3, week4)
2 as (
3 select 1, 'a', 10, 15, 11, 8 from dual union all
4 select 2, 'b', 7, 4, 2, 9 from dual union all
5 select 3, 'c', 3, 3, 1, 0 from dual
6 )
7 select id, code, max(week) first_top, min(week) next_top from (
8 select id, code, row_number() over(partition by id, code order by week desc) rnk, week
9 from (
10 select t.id, t.code,
11 decode(r.rn,1,week1,2,week2,3,week3,4,week4) week
12 from t,
13 (select rownum rn from dual connect by level <= 4) r
14 ))
15 where rnk in (1,2)
16 group by id, code
17 /
ID C FIRST_TOP NEXT_TOP
---------- - ---------- ----------
3 c 3 3
1 a 15 11
2 b 9 7
如果您在几周内有非空值和不同的值,您可以使用以下内容:
SQL> with t (id, code, week1, week2, week3, week4)
2 as (
3 select 1, 'a', 10, 15, 11, 8 from dual union all
4 select 2, 'b', 7, 4, 2, 9 from dual union all
5 select 3, 'c', 3, 2, 1, 0 from dual
6 )
7 select id, code
8 , greatest(week1, week2, week3, week4) first_top
9 , greatest(
10 case when week1 < greatest(week1, week2, week3, week4) then week1 else -1e28 end,
11 case when week2 < greatest(week1, week2, week3, week4) then week2 else -1e28 end,
12 case when week3 < greatest(week1, week2, week3, week4) then week3 else -1e28 end,
13 case when week4 < greatest(week1, week2, week3, week4) then week4 else -1e28 end
14 ) second_top
15 from t
16 /
ID C FIRST_TOP SECOND_TOP
---------- - ---------- ----------
1 a 15 11
2 b 9 7
3 c 3 2
但要获得正确的解决方案,需要更多的细节