選擇列表中的列'sc.cno'無效,因爲該列沒有包含在聚合函數或者group by 字句中《SQL中的group by該怎麼用?》

1.SQL Server中,子查詢不能返回多個值
2.子查詢中不能包含ORDER BY子句
3.group by 可以將查詢結果按某一列或多列的值進行分組。group by 一般是和聚合函數一起搭配使用的,不然用了也沒什麼意義,除了消除重複功能外,但消除重複一般使用distinct。

當我執行以下語句:select sno,cno from sc group by sno 報錯如下
在這裏插入圖片描述
因爲,我的select字段中有cno課程號,但卻不是在聚合函數或者group by子句
中,所以報錯。
正確寫法:
//這一句是查看,每個人修讀了幾門課
select sno,count(cno) from sc group by sno
//這裏先按學號分組再按課程號分組,只按學號分組不會出現重複的學號的
select sno,cno from sc group by SNo,CNo
2) 如果是篩選結果 可以先使用where指定條件 再用group by 或者先用group
by 再用having來指定條件,(聚合函數不能出現在where子句中,只可以和select或having搭配,SQL Server會報錯)
//查詢選修兩個門課及以上的學生
//報錯
select SNo from sc group by SNo where count()>1
//正解
select SNo from sc group by SNo having count(
)>1
//查看每個學生選了幾門課,且選的課的成績不爲空

//報錯,group by要在where後面
select sno,count(cno) from sc group by SNo where score is not null
//正解
select sno,count(cno) from sc where score is not null group by SNo
通過這次實驗,我對查詢語句有了更深入的理解,以前自己沒注意到的語法細節也在實驗中體現了出來,感謝老師在實驗過程中也對我給到很多的建議和幫助,不管怎麼說,最終還是得勤加練習並不斷總結才能對sql語句運用的更加熟練。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章