基于条件的分组和排序

时间:2012-12-04 06:09:54

标签: sql oracle11g

我有以下表格和数据以及我的规则的预期输出

drop table test_new

create table test_new (id number(9), loc1 number(9), loc2 number(9), percentage number(9));

insert into test_new values (1,1,2,0);
insert into test_new values(2,1,3,10);
insert into test_new values(3,1,4,5);
insert into test_new values(4,1,5,45);
insert into test_new values(5,2,3,0);
insert into test_new values(6,2,4,90);
insert into test_new values(7,2,5,0);
insert into test_new values(8,3,4,0);
insert into test_new values(9,3,5,0);
insert into test_new values(10,4,5,40);
insert into test_new values(11,7,5,0);
insert into test_new values(12,9,4,0);
insert into test_new values(13,10,5,90);
insert into test_new values(14,11,5,70);
insert into test_new values(15,1,15,45);

需要此表单查询显示

id  loc1 loc2  percentage
15    1    15       45
2    1    3       10
6    2    4       90
13   10   5       90

不是这个

id   loc1 loc2  percentage
2    1    3       10
15    1    15      45
6    2    4       90
13   10   5       90

规则:

  1. 显示id, loc1, loc2, percentage,其中百分比大于零。
  2. 删除列loc2中的所有数据冗余,以便删除具有较低百分比值的行。
  3. 根据percentage asc对数据进行排序,并将其基于列loc1进行分组。

1 个答案:

答案 0 :(得分:0)

试一试。

select t1.* from test_new t1
left join test_new t2
on t1.loc2 = t2.loc2 and t1.percentage < t2.percentage
where t1.percentage > 0 and t2.loc2 is null
order by t1.percentage

但是,我认为根据您的评论(而不是您的结果表,这似乎是错误的),这是您所期望的:

+----+------+------+------------+
| ID | LOC1 | LOC2 | PERCENTAGE |
+----+------+------+------------+
|  2 |    1 |    3 |         10 |
| 15 |    1 |   15 |         45 |
|  6 |    2 |    4 |         90 |
| 13 |   10 |    5 |         90 |
+----+------+------+------------+