首先區分一下這兩個函式使用方法:
count():主要用來統計表的行數。
sum():用來求表中某乙個字段資料的和,用大白話說就是求某一列的和。
直接上表:
student:
| sno | sname | sage | s*** |
+------+--------+------+------+
| s001 | 張三 | 23 | 男 |
| s002 | 李四 | 23 | 男 |
| s003 | 吳鵬 | 25 | 男 |
| s004 | 琴沁 | 20 | 女 |
| s005 | 王麗 | 20 | 女 |
| s006 | 李波 | 21 | 男 |
| s007 | 劉玉 | 21 | 男 |
| s008 | 蕭蓉 | 21 | 女 |
| s009 | 陳蕭曉 | 23 | 女 |
| s010 | 陳美 | 22 | 女 |
sc(學號、課程號、分數):
| sno | cno | score |
+------+------+-------+
| s001 | c001 | 78.9 |
| s001 | c002 | 82.9 |
| s001 | c003 | 59 |
| s002 | c001 | 80.9 |
| s002 | c002 | 72.9 |
| s003 | c001 | 81.9 |
| s003 | c002 | 81.9 |
| s004 | c001 | 60.9 |
+------+------+-------+
需求:查詢所有同學的學號、姓名、選課數、總成績;
錯誤sql:
select a.sno,a.sname,count(b.cno),sum(b.score) from student a,sc b where a.sno=b.sno;
這是非常大意的寫法,沒有經過仔細分析,選課數、總成績應該是成績表sc來提供,正確寫法:
select a.sno,a.sname,b.cnos,b.core from student a,(select sno,count(cno) cnos,sum(score) core from sc group by sno) b where a.sno=b.sno;
SQL語句中SUM函式
在工作中有兩個sum的求和函式相加的時候如果其中乙個是null那麼相加的結果也是null,所以相加之前要用nvl處理下 例如 select sum a.create staff from dp.t spec steet a where a.sheet id 1154查出來是空 如果直接這樣相加結果肯...
sql語句中的count
不考慮null的情況,如果null參與聚集運算,則除count 之外其它聚集函式都忽略null.count 1 和count 主鍵 這兩個只掃瞄主鍵index就可以得到資料,count 是掃瞄表的。所以count 1 和count 主鍵 這兩個效率高。還有一種寫法是count rowid 這也是只掃...
sql語句中的 和in
今天優化了一段專案中的 的作用就是在使用者表和使用者賬戶表中查出所有有賬戶的使用者,當然查出來的使用者應該是不重複的 distinct一下 這2個表中的記錄大約都為2萬條左右,資料量還是很大的,通過hibernate的轉換出來是這樣的 select from select rownumber ove...