1. 程式人生 > 實用技巧 >Invalid use of group function解決辦法——MySQL

Invalid use of group function解決辦法——MySQL

Invalid use of group function即“集函式的無效用法”

錯句示例:SELECT sname AS '優秀學生姓名',AVG(score) as '平均成績' FROM grade_info WHERE AVG(score)>90 GROUP BY sno;

正確寫法:SELECT sname AS '優秀學生姓名',AVG(score) as '平均成績' FROM grade_info GROUP BY sno HAVING AVG(score) > 90 ;

說明:

GROUP BY,顧名思義:根據...分組,在SQL中常根據指定欄位分組(指定欄位內容相同是為一組),然後針對組進行相關操作

WHERE和HAVING的區別在於:

where 子句的作用是對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾資料,where條件中不能包含聚組函式,使用where條件過濾出特定的行。

having 子句的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚組函式,使用having 條件過濾出特定的組,也可以使用多個分組標準進行分組。

示例錯句的問題就在於:WHERE子句中使用集函式。

另外需要注意的地方是,SQL語法:

SELECT [DISTINCT|DISINCTROW|ALL] select_expression,... -- 查詢結果
[FROM table_references -- 指定查詢的表


[WHERE where_definition] -- where子句,查詢資料的過濾條件
[GROUP BY col_name,...] -- 對[匹配where子句的]查詢結果進行分組
[HAVING where_definition] -- 對分組後的結果進行條件限制
[ORDER BY{unsigned_integer | col_name | formula} [ASC | DESC],...] -- 對查詢結果進行排序
[LIMIT [offset,] rows] -- 對查詢的顯示結果進行條數限制
[PROCEDURE procedure_name] --查詢儲存過程返回的結果集資料

]

查詢語句書寫順序須遵循上述規則。
轉自https://blog.csdn.net/bestforxu/article/details/51131234