[Up有分]高分求教:一个查询

Lem0n 2003-08-30 11:11:49
Table1中有(ID,Name1,Name2,Value)
要查询出来的数据要求:
Name1 & Name2 组合一样的只能出现一条,并且出现那一条中的Value是最小的

例如:
ID Name1 Name2 Value
1 aaa bbb 20
2 aaa bbb 10
3 bbb ccc 50
4 bbb ccc 30
5 ccc ddd 60

最后查询结果应为:
ID Name1 Name2 Value
2 aaa bbb 10
4 bbb ccc 30
5 ccc ddd 60

谢谢~~
...全文
64 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
meshwork 2003-09-06
  • 打赏
  • 举报
回复
SELECT t1.id, t1.name1, t1.name2, t1.value from demo t1 where
t1.value = (Select min(value) from demo t2 where t2.name1 = t1.name1 and t2.name2 = t1.name2)
skyxj 2003-09-05
  • 打赏
  • 举报
回复
select Name1, Name2, Value, min(ID) from Table1 where Name1||Name2||Value in (select Name1||Name2||min(Value) from Table1 group by Name1||Name2) group by Name1, Name2, Value;

通过!
Lem0n 2003-09-03
  • 打赏
  • 举报
回复
选id小的
danny007 2003-09-02
  • 打赏
  • 举报
回复
请问楼主,如果value相同的有两条,且都是最小,那么只选一条的原则是什么?该选id大的还是小的呢?
danny007 2003-09-01
  • 打赏
  • 举报
回复
select * from table1 t
where value=(select min(value) from table1
where name1=t.name1 and name2=t.name2 )
danny007 2003-09-01
  • 打赏
  • 举报
回复
留个位子,学习学习
Lem0n 2003-09-01
  • 打赏
  • 举报
回复
谢谢大家的回复,

第二种方法还没有排除最小的value里面還有重復的这种可能吧?
select * from table1 where (name1,name2,value) in (select name1,name2,min(value) from table1 group by name1,name2)
如果同一组中value相同的有两条,那么最后会把这两条都选出来的
tiangou 2003-09-01
  • 打赏
  • 举报
回复
又及, beckhambobo(beckham)的两个方法都是正确的
tiangou 2003-09-01
  • 打赏
  • 举报
回复
SQL> select * from test;

ID NAME1 NAME2 VALUE
------ ------------------------------ ------------------------------ ------
1 aaa bbb 20
2 aaa bbb 10
3 bbb ccc 50
4 bbb ccc 30
5 ccc ddd 60

SQL>
SQL> select id,name1,name2,value from test
2 where (name1,name2,value) in
3 ( select name1,name2,min(value)
4 from test
5 group by name1,name2
6 )
7 ;

ID NAME1 NAME2 VALUE
------ ------------------------------ ------------------------------ ------
2 aaa bbb 10
4 bbb ccc 30
5 ccc ddd 60

SQL>
jiezhi 2003-08-30
  • 打赏
  • 举报
回复
為了排除最小的value里面還有重復的:
select * from a where rowid in
(select rowid from
(select Name1,Name2,min(Value),min(rowid) from a group by Name1,Name2)
)
onejune4450 2003-08-30
  • 打赏
  • 举报
回复
select id,name1,name2,value from
(select row_number() over(partition by name1||name2 order by value ) rn,
id,name1,name2,value from table1)
where rn = 1;
beckhambobo 2003-08-30
  • 打赏
  • 举报
回复
方法二:
select * from table1 where (name1,name2,value) in (select name1,name2,min(value) from table1 group by name1,name2)
Lem0n 2003-08-30
  • 打赏
  • 举报
回复
select Name1,Name2,min(Value),min(rowid) --这里会把Name1&Name2一样的记录中Value最小的 值和RowID最小的值选出来吧?同一组中RowID最小的记录不一定Value也最小吧?
from a group by Name1,Name2
beckhambobo 2003-08-30
  • 打赏
  • 举报
回复

select id,name1,name2,value from
(select rank() over(partition by name1,name2 order by value ) rk,
id,name1,name2,value from table1)
where rk= 1;
Wnyu 2003-08-30
  • 打赏
  • 举报
回复
select Name1,Name2,min(Value) from Table1 group by Name1,Name2

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧