在先等一个sql写法(oracle9i)

yangfeihu 2010-08-17 09:00:43
table : A, B, C,D
A:表示id,不可重复
B,C: 可以重复出现
运行环境:oracle9i
问题: 按b,c 分组后(select b,c,count(*) from table group by b,c),最后结果: A,B,C,count(*)
注:select A,B,C,count(*) group by A,B,C 请 不要给出这样的答案,一看就知道错的.
求高手帮下忙,万分感谢

...全文
149 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
funfunqi 2010-08-18
  • 打赏
  • 举报
回复
哦,我明白了,a不在group 中,所以不能那么写。 可以写成
select b,c,count(*) from t group by b,c

但是加上a就不行了。

所以需要使用自然连接,但是自然连接是对表的连接,无法对结果集连接。
所以需要使用临时表,所以需要使用存储过程来实现。

解决办法就是使用存储过程,建立一个临时表,临时表temp,里面存放
select b,c,count(*) from t group by b,c
的结果

然后 select a,b,c,count(*) from (t join temp on t.b=temp.b and t.c=temp.c)

这样输出的结果就是你想要的答案了
fjc04091125 2010-08-17
  • 打赏
  • 举报
回复
不知道楼主想干嘛
/
DAVE_LUO 2010-08-17
  • 打赏
  • 举报
回复
select min(a) as a,b,c,count(*) from table group by b,c;


楼主在这里混淆概念,该打。
rainsilence 2010-08-17
  • 打赏
  • 举报
回复
B+C是唯一的马?

从你count(*)来看,应该不是唯一的把。
但是A是唯一的。

如果在检索结果里出现A,那么count无可避免的变成1

所以lz,你想要什么样的结果?
最大A,最小A?
还是说要所有A,并且需要纪录条数?
建议你
select a,b,c from table order by b,c
用纪录条数来取得一组b,c有多少条

或者用两句sql来实现。
select a,b,c from table order by b,c
select b,c,count(*) from table group by b,c
huazhiyu1981 2010-08-17
  • 打赏
  • 举报
回复
没明白你的意思啊!
crazylaa 2010-08-17
  • 打赏
  • 举报
回复
select b,c,count(*) from table group by b,c),最后结果: A,B,C,count(*),

你要最大的A还是最小的A还是随便哪个A还是全部A?

最大:
select max(a) as a,b,c,count(*) from table group by b,c;
最小:
select min(a) as a,b,c,count(*) from table group by b,c;
全部:
貌似要用存储过程或函数来实现,wm_concat函数是10g才支持的。
n1333 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yangfeihu 的回复:]
引用 1 楼 n1333 的回复:
无解!
return false;

无聊不?
[/Quote]
是你的问题本来就是这个答案
soli11722984 2010-08-17
  • 打赏
  • 举报
回复
真不明白想怎么样???

A既然ID,可你又来个count。。。。。那么ID怎么个表示????
ajh9990 2010-08-17
  • 打赏
  • 举报
回复
不会啊
Thinking_In_IT 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 yangfeihu 的回复:]
table : A, B, C,D
A:表示id,不可重复
B,C: 可以重复出现
运行环境:oracle9i
问题: 按b,c 分组后(select b,c,count(*) from table group by b,c),最后结果: A,B,C,count(*)
注:select A,B,C,count(*) group by A,B,C 请 不要给出这样的答案,一看就知道错的.……
[/Quote]

不知道你想干嘛 貌似楼主 语文水平很水~ 你能让大家 明白你什么意思吗?
yangfeihu 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 n1333 的回复:]
无解!
return false;
[/Quote]
无聊不?
jon_____ 2010-08-17
  • 打赏
  • 举报
回复
select a,b,c from table
ok 搞定
n1333 2010-08-17
  • 打赏
  • 举报
回复
无解!
return false;
Jay_xiaolei 2010-08-17
  • 打赏
  • 举报
回复
没明白意思
qysnowqy 2010-08-17
  • 打赏
  • 举报
回复

select A,B,C,count(*) from Table t inner join (select B,C from Table group by B,C) tt
on t.B=tt.B and t.C=tt.C

由于家的本烂木有数据库,帮你写的一个,没测试,楼主自己试试吧。
wy9851 2010-08-17
  • 打赏
  • 举报
回复
楼主描述的真的不清楚。。

如果楼主想得到 A,B,C,COUNT(*)的结果。COUNT(*)是B,C分组后的所有行数。

select A,B,C,(select count(*) from table group by b,c) D from table;

这样做意义不知道何在。。。

但是根据楼主的描述。。。。我不由得写出了这个。。。
avajuohz 2010-08-17
  • 打赏
  • 举报
回复
我也没看明白。。。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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