sql收集

行舟 2010-03-25 06:38:12
需求:
--按a列分组求出B列的和为: B(a),B列的和为:B
--求出B(a)>B/50的所有列
表、模拟数据
create table test(a number,b number);
begin
for i in 1..50
loop
insert into test values(i,trunc(dbms_random.value*100));
end loop;
end;

我先给出三种写法:楼下补充啊!5月份结贴!

--传统
select a, sum(b)
from test
group by a
having sum(b) > (select sum(b) / 30 from test);
--9i以后
with temp as (select a, sum(b) sum_b from test group by a)
select a, sum_b from temp where sum_b > (select sum(sum_b) / 30 from temp)
--
select a,sum_b
from (select distinct a,
sum(b) over(partition by a) sum_b,
sum(b) over() / 30 total_b
from test)
where sum_b > total_b
...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
行舟 2010-03-29
  • 打赏
  • 举报
回复
我只是想看下。这样需求有多少中写法~
如果更加深入点,可以研究下各种写法的性能!
行舟 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java3344520 的回复:]
SQL code
--不明白你的意图,没有需求,就没有结果

select a, sum(b) as b1,
from test
group by a
having sum(b) > sum(b)/30 ;

select a,b1 from
(select a, sum(b) as b1, sum(b)/30 as b2,
from test
group by ……



[/Quote]
需求在上面啊!怎么还不明白了~

需求:
--按a列分组求出B列的和为: B(a),B列的和为:B
--求出B(a)>B/50的所有列

代码中我写的1/30!
行舟 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ssqtjffcu1 的回复:]
楼主的需要是不是有点问题,你的a列是1到50,都没有重复,还要分组做什么?
[/Quote]
那个匿名块只是用来模仿数据的,可以多次运行!
娃娃鱼 2010-03-29
  • 打赏
  • 举报
回复
学习了 在学习
sxdtgsh 2010-03-29
  • 打赏
  • 举报
回复

select ttest_a.a, sum(ttest_a.b)
from ttest_a, (select (sum(b) / 30) c
from ttest_a) ttest_sumb
group by ttest_a.a
having sum(ttest_a.b)> max(ttest_sumb.c)
ssqtjffcu 2010-03-29
  • 打赏
  • 举报
回复
楼主的需要是不是有点问题,你的a列是1到50,都没有重复,还要分组做什么?
ORHCLE 2010-03-26
  • 打赏
  • 举报
回复
with temp1 as (select a, sum(b) sum_b1 from test group by a),
temp2 as (select sum(b)/30 sum_b2 from test)
select temp1.a, temp1.sum_b1
from temp1,temp2
where temp1.sum_b1 > temp1.sum_b2;
Blaider 2010-03-26
  • 打赏
  • 举报
回复
不会新方法,就等着5月份接分了……
YY_MM_DD 2010-03-26
  • 打赏
  • 举报
回复
5月再来回贴...mark了..
liuyi1985_2008 2010-03-26
  • 打赏
  • 举报
回复
学习了
iqlife 2010-03-26
  • 打赏
  • 举报
回复
--不明白你的意图,没有需求,就没有结果

select a, sum(b) as b1,
from test
group by a
having sum(b) > sum(b)/30 ;

select a,b1 from
(select a, sum(b) as b1, sum(b)/30 as b2,
from test
group by a)
where b1>b2
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在sql语句执行的生命周期中所处的位置和作用,sql引擎如何生成执行计划以及如何获取sql语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“sql优化技术”深入分析oracle的sql优化技术,包括逻辑优化技术和物理优化技术。用大量示例详尽分析oracle 中现有的各种查询转换技术,先分析oracle如何收集、统计系统和对象的数据,然后推导各种代价估算公式,给出各种情形下的代价计算演示。 第三篇“sql调优技术”深入剖析oracle提供的各项调优技术。先对语句实际运行的性能统计数据进行了深度分析,介绍各项统计数据是由什么操作导致的以及如何统计。然后介绍如何对sql语句进行优化以获得稳定、高效的性能。最后,依据对sql优化及调优技术的分析,介绍如何快速优化sql的思路。 《oracle 高性能sql引擎剖析:sql优化与调优机制详解》内容丰富且深入,破解了oracle技术的很多秘密,适合oracle数据库管理员、应用开发人员参考。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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