ORACLE分组查询和统计等

select flow_id,rw from (select t.flow_id ,rownum as rw from apex_030200.wwv_flow_list_templates t)  where rw >= 5

1.rownum只能用<如果使用>加别名

2.子查询引用只能在查询出的结果中引用,比如子查询没有查出flow_id,外层不能用,另外外层不能引用内层的t

3.薪水前三名,内层查出薪水 order desc的虚表外层使用rownum<3

4.merge可以实现存在数据就update不存在你就insert

merge into product a

using (select  1717 product_id, ‘002‘ req_no from dual b)

on (a.product_id = b.product.id and a.req_no = b.req.no)

when matched then

update set  product name = ‘‘.....................

when not matched then

insert () values ()

5.start with connect by 可以查询出一组树的数据,注意最后connect by的条件(父节点=子节点 向上查询 反之向下查询)

可以order排序,可以加入两棵树(or),也可以加入where条件

select * from emp

where......

start with empnc = 7369 or empnc = 7204(注意不能用and )

connect by prior mgr = empno

order by ...

6 份额(查询某数据占有总数据的百分比)

select t.empno,t.ename,t.sal,
100*round(sal/sum(sal) over(),5)
 from emp t

7 连续求和(同名分为同组 累加)

select t.empno,t.ename,t.sal,
sum(sal) over(order by sal)
 from emp t

8.带条件的连续求和(分部门连续求和)

select t.empno,t.ename,t.sal,t.deptno,
sum(sal) over(partition by t.deptno order by sal)
 from emp t

9.分部门总和(取出orderby)

select t.empno,t.ename,t.sal,t.deptno,
sum(sal) over(partition by t.deptno)
 from emp t

10工资的分组查询份额(总数的百分比)带上部门分组

select t.empno,t.ename,t.sal,t.deptno,
100*round(sal/sum(sal) over (partition by t.deptno),4)
 from emp t

注意这里查询的是“”分组“,因此这里查询的是变成一组为一个100%,查询的是一个部门中员工在本部分所占用的薪水比例

11分组查询出单一条件并分级(查询某一个部门的薪水的级别)注意rank()和row_number()的区别 rank是跳跃性并列(1.1.3.3.5) row_number(1.2.3.4.5)

select t.*,ROW_NUMBER() over(partition by t.deptno order by t.sal desc) rank from emp t

12“总”。。。。。。这个字眼一般使用group by(区分于over(partition by order by))

按部门分组查询部门的总薪水

select sum(t.sal),t.deptno from emp t group by t.deptno

13 总的基础上再次分组 group by + rollup

select sum(t.sal),t.deptno from emp t group by rollup (t.deptno)汇总后将总和进行求和

select sum(t.sal),t.job,t.deptno from emp t group by rollup (t.deptno,t.job)注意多个rollup其实只有第一个参数有效

14cube 连接在order by后面(代替ROLLUP) rollup升级版 全部分组

15grouping实现不用java代码就可以对oracle 查询出的null字段进行赋值 0 本身结果 1合计结果

select sum(t.sal),t.deptno,
(case
       when((grouping(t.job)=1 and grouping(t.deptno)=0)) then ‘部门小计‘
       when((grouping(t.job)=1 and grouping(t.deptno)=1)) then ‘部门总计‘
else t.job end) as
job from emp t group by rollup (t.deptno,t.job)

16分组后的字段累加(比如按照员工名称,根据月份分组,实现自1月份到12月份工资累加,即二月份是 1月 + 2月 。。)
select t.empno, t.ename, t.sal, sum(sal) over (partition by t.ename order by t.sal desc) from emp t

17分组最高值 最低值 平均值 使用 max() over(partition by order by)代替sum() 还可以用min() avg()

18select * from v$transaction 查看事务

19多层分组函数和子查询之间的冲突问题

select   a.CREATOR, a.count_Sum ,b.full_name,b.dept_code,b.area_code from (
select temp.c CREATOR,count(temp.c) as count_Sum from (
select
         t.ca,
         c.lv,instr(t.ca, ‘,‘, 1, c.lv) + 1,
         substr(t.ca,
                instr(t.ca, ‘,‘, 1, c.lv) + 1,
                instr(t.ca, ‘,‘, 1, c.lv + 1) -
                (instr(t.ca, ‘,‘, 1, c.lv) + 1)) AS c
    from (select
                 ‘,‘ || checker || ‘,‘ AS ca,
                 checker,
                 LENGTH(checker),
                 length(checker || ‘,‘),
                 REPLACE(checker, ‘,‘),
                 length(REPLACE(checker, ‘,‘)),
                 nvl(length(REPLACE(checker, ‘,‘)), 0),
                 length(checker || ‘,‘) - nvl(length(REPLACE(checker, ‘,‘)), 0) AS cnt
            FROM wm_time_info a where a.check_result !=1) t,
            (select LEVEL lv from dual CONNECT BY LEVEL <= 100) c
   where c.lv <= t.cnt  ) temp group by temp.c) a ,base_user b where a.CREATOR = b.user_code

  外层查询和内层分组冲突

--select   a.CREATOR, a.count_Sum ,b.full_name,b.dept_code,b.area_code from (
select o.CREATOR,count(o.CREATOR) as count_Sum,FULLNAME,DEPTCODE,AREACODE from (
select temp.c CREATOR,b.full_name FULLNAME,b.dept_code DEPTCODE,b.area_code AREACODE,work_date from
(
select
         work_date,
         t.ca,
         c.lv,
         instr(t.ca, ‘,‘, 1, c.lv) + 1,
         substr(t.ca,
                instr(t.ca, ‘,‘, 1, c.lv) + 1,
                instr(t.ca, ‘,‘, 1, c.lv + 1) -
                (instr(t.ca, ‘,‘, 1, c.lv) + 1)) AS c
    from (
    ---
    select
                 work_date,
                 ‘,‘ || checker || ‘,‘ AS ca,
                 checker,
                 LENGTH(checker),
                 length(checker || ‘,‘),
                 REPLACE(checker, ‘,‘),
                 length(REPLACE(checker, ‘,‘)),
                 nvl(length(REPLACE(checker, ‘,‘)), 0),
                 length(checker || ‘,‘) - nvl(length(REPLACE(checker, ‘,‘)), 0) AS cnt
            FROM wm_time_info a where a.check_result !=1
     ---
            ) t,
            (select LEVEL lv from dual CONNECT BY LEVEL <= 100) c
   where c.lv <= t.cnt
   ) temp ,base_user b where temp.c = b.user_code ) o
   --where work_date >=‘2016-01-10‘
   group by o.CREATOR,FULLNAME,DEPTCODE,AREACODE
   --) a ,base_user b where a.CREATOR = b.user_code

  20 注意 本条select中的分组和子查询都不可以作为函数的参数传入

原文地址:https://www.cnblogs.com/guohu/p/9082239.html

时间: 2024-10-18 10:14:01

ORACLE分组查询和统计等的相关文章

solr4.5分组查询、统计功能介绍

说到分组统计估计大家都不会陌生,就是数据库的group by语句,但是当我们采用solr4.5全文检索时,数据库提供再好的sql语句都没有任何的意义了,那么在solr4.5中我们如何做到分组统计呢?其实很简单,下面我们来看看怎么做. 示例场景: 现在有个电子商务网站的产品搜索功能,不同的商家发布不同的产品,我们想通过关键词"手机"去查找不同商家下面有多少有关手机的产品.假设索引库的结构是产品id(id).产品标题(title).产品价格(price).商家id(companyId).

oracle 分组查询 子查询 统计查询 FROM加子查询临时表 查询高于平均工资 示例代码

---求平均工资 SELECT AVG(sal) FROM emp; -----------大于平均工资 SELECT e.ename,e.job,e.sal FROM emp e WHERE e.sal>(SELECT AVG(sal) FROM emp) -------- --e领导编号=m雇员编号 --emp雇员表,dept部门表 SELECT e.ename 雇员姓名,e.job 雇员职位,e.sal 雇员工资, m.ename 领导姓名,m.job 领导职位, d.dname 部门名称

oracle分组查询

分组函数 在分组函数中,如果有一个查找项分组,其他项必须也分组,比如下面的语句会报错,因为sal分组了,而ename没有分组: 1.显示工资最高的员工: 2.显示所有员工的平均工资: 2.1使用系统函数: 2.2自定义计算: 3.显示工资高于平均工资的员工信息: 对查询结果进行分组统计: 4.查询每个部门的最高工资和平均工资: 5.显示每个部门的每种岗位的平均工资与最高工资: 6.显示平均工资低于2000的部门号和它的平均工资: 对数据分组的总结 1 分组函数只能出现在选择列表.having.o

Mysql按时间段分组查询来统计会员的个数

1.使用case when方法(不建议使用)-  代码如下 复制代码 SELECT    COUNT(DISTINCT user_id) user_count,    CASE    WHEN create_time>1395046800 AND create_time<1395050400 THEN '17:00-18:00'    WHEN create_time>1395050400 AND create_time<1395054000 THEN '18:00-19:00' 

solr4分组查询、统计

示例场景:下面是京东商城搜索 拉箱 的搜索结果,这样的页面结构,非常方便的让用户使用和筛选,他们是怎么做到的呢? 假设索引库的结构是产品id(id).产品标题(title).产品价格(price).商家id(companyId). ModifiableSolrParams params = new ModifiableSolrParams(); params.set("fq", fq); params.set("facet", "on"); pa

oracle 分组查询

球员信息表 T: 球员id      球员名称      所在球队 12344       麦迪             火箭 34323       科比             活人 球员赛季得分表A,字段如下: id         球员id         赛季         场均得分 01         34323          2013           34 02         12344          2013           12 03         43

【Django】Django 如何支持 分组查询、统计?

代码: from django.db.models import Sum alarm_sum_group_items = models.FILE_PROTECT_ALARM.objects.filter(customer_id=customer_id).values('device_hash').annotate(alarm_sum=Sum('cmn_merge_count')) data = [] for item in alarm_sum_group_items: tmp = {} tmp[

Oracle和MySQL分组查询GROUP BY

Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错:“ORA-00979: not a GROUP BY expression”.而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确.所以,作者建议在写SQL语句的时候,

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

一句话概括的话,SQL作为结构化查询语言,是标准的关系型数据库通用的标准语言: T-SQL 是在SQL基础上扩展的SQL Server中使用的语言 1,普通查询 #查询Info表中的所有列 select * from Info #查询Info表中的Name和Code列 select Name,Code from Info 2,条件查询 关键字where #查询Info表的左右列 限定范围 列名为p001 select * from Info where 列名="p001" #查询条件之