sql中Over用法

來源:互聯網
上載者:User

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中如果建立了觸發器和主鍵關係來控制內容不允許重複,則觸發器不會觸發,因主鍵先於觸發器,只會報主鍵錯誤,觸發器不會執行。

所以觸發器和主鍵只能選擇一個。建議選擇觸發器!原因觸發器容易控制顯示錯誤!顯示錯誤比較友好!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.