小弟新手,最近在正在学sql,向大家请教一个问题:
发现oracle提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。也就是distinct只能返回它的目标字段,而无法返回其它字段。
比如说:
一张表:
ID NAME
---------- --------------------
1 a
2 b
3 c
4 c
5 b
-------------------------------
怎么用sql查询得到这么个结果:
ID NAME
---------- --------------------
1 a
2 b
3 c
--------------------------------
我试过的结果:
select distinct name from table
得到的结果是: name
a
b
c好像达到效果了,可是,没有想要的id值呢,改查询语句:select distinct name, id from table结果会是: id name
1 a
2 b
3 c
4 c
5 bdistinct同时作用了两个字段。
到底怎么办???
跪求各位高手
发现oracle提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。也就是distinct只能返回它的目标字段,而无法返回其它字段。
比如说:
一张表:
ID NAME
---------- --------------------
1 a
2 b
3 c
4 c
5 b
-------------------------------
怎么用sql查询得到这么个结果:
ID NAME
---------- --------------------
1 a
2 b
3 c
--------------------------------
我试过的结果:
select distinct name from table
得到的结果是: name
a
b
c好像达到效果了,可是,没有想要的id值呢,改查询语句:select distinct name, id from table结果会是: id name
1 a
2 b
3 c
4 c
5 bdistinct同时作用了两个字段。
到底怎么办???
跪求各位高手
select distinct name,min(id) as id from a group by name order by id;
单独的distinct 是做不到的,decode() 很好用,分组也可以.
select 1 id,'a' name from dual
union all
select 2 id,'b' name from dual
union all
select 3 id,'c' name from dual
union all
select 4 id,'c' name from dual
union all
select 5 id,'b' name from dual
)
select distinct min(id) id, name from temp group by name;结果:
id name
1 a
2 b
3 c
select name,min(id) as id from a group by name ;
SQL> select * from t1; ID NAME
---------- ----------
1 a
2 b
3 c
4 c
5 bSQL> select min(id),name
2 from t1
3 group by name; MIN(ID) NAME
---------- ----------
1 a
2 b
3 c
select name,max(id) as id from table_test group by name order by id;
这写法明显是错的, 逻辑都不对, 按name聚合,取了最小id聚合值。试想还有第三列, 如何得到原记录? 说结果对,也只是因为仅有两列,凑巧罢了。http://topic.csdn.net/u/20080123/18/9731d130-0d4b-4c11-8d89-f2c3ca331f0c.html
SQL> select * from test_lwc; ID NAME
---------- --------------------
3 c
1 a
2 b
5 b
4 c
6 b6 rows selected.SQL> select min(id) ,name from test_lwc group by name; MIN(ID) NAME
---------- --------------------
1 a
2 b
3 c
一样可以啊,不明白你的意思。
1 aa 13
2 aa 9
3 bb 51
4 bb 12要选出id,name,n
你如何聚合?
select name,min(id),min(n) from tb
结果是
aa 1,9
bb 3,12
这是聚合结果,不是原始数据行。获得原始数据行解法,我那个链接里已经有了。
当然用row_number也会有很多写法。