zoukankan      html  css  js  c++  java
  • sql中Over用法

    1.over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。其参数:over(partition by columnname1 order by columnname2)含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。例如:employees表中,有两个部门的记录:department_id =10和20 select department_id,rank() over(partition by department_id order by salary) from employees就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。如果是partition by org_id,则是在整个公司内进行排名

    2.不是over,是Rank() over ,具体语法形如: RANK ( ) OVER ( [query_partition_clause] order_by_clause ) DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序, 其中PARTITION BY 为分组字段,ORDER BY 指定排序字段

    INSERT INTO student_class_grade VALUES(13,2,80); INSERT INTO student_class_grade VALUES(14,2,80); INSERT INTO student_class_grade VALUES(15,2,90); INSERT INTO student_class_grade VALUES(16,2,75); INSERT INTO student_class_grade VALUES(17,2,100);
    sql server2005中我们可以用简单的一个语句完成这个任务partition by 后面跟聚合列,如下:


    select         student_id,class_no,grade     ,class_avg_grade = AVG(grade) over(partition by class_no)  from student_class_grade
    若是在2000中,我们不得不使用子查询,查询要复杂一些


    select scg.student_id     ,scg.class_no     ,scg.grade     ,t_avg. class_avg_grade from student_class_grade scg INNER JOIN  (select class_no,class_avg_grade = AVG(grade) from student_class_grade group by class_no) t_avg ON t_avg.class_no = scg.class_no
    同样其他聚合函数SUM,COUNT,MAX,MIN也可以使用类似用法。

    over()函数中可以跟两列,partition by columnName 是分组的列明,order by 是在分组的基础上进行排序!

    select Files.ExtensionWord , ROW_NUMBER() over( partition by Files.ExtensionWord Order by Files.FileId DESC) as Id from Files 测试sql

    测试结果如图,先按ExtensionWord分组,在分好的组中进行排序

    在sqlserver中如果创建了触发器和主键关系来控制内容不允许重复,则触发器不会触发,因主键先于触发器,只会报主键错误,触发器不会执行。

    所以触发器和主键只能选择一个。建议选择触发器!原因触发器容易控制显示错误!显示错误比较友好!

  • 相关阅读:
    漏洞都是怎么编号的CVE/CAN/BUGTRAQ/CNCVE/CNVD/CNNVD
    数据集成之主数据管理(一)基础概念篇
    hdu 4940 Destroy Transportation system(水过)
    关于C++ const 的全面总结
    UserManageSys
    malloc函数具体解释
    Haskell 差点儿无痛苦上手指南
    机房收费系统——附加数据库
    面向对象程序设计与面向过程程序设计解析
    java的System.getProperty()方法能够获取的值
  • 原文地址:https://www.cnblogs.com/Minghao_HU/p/2486853.html
Copyright © 2011-2022 走看看