mysql報錯:Invalid use of group function


select
	orderNumber,
	sum(priceEach * quantityOrdered) as totalvalues
from
	orderdetails
where 
	sum(priceEach * quantityOrdered) > 60000;

  

 

 

 報錯原因:

是由於在where語句中使用了聚合函數。

where和having的作用以及區別:
WHERE是一個約束聲明,在查詢數據庫的結果返回之前對數據庫中的查詢條件進行約束,即在結果返回之前起作用,且where后面不能使用“聚合函數”,因為where的執行順序在聚合函數之前。

HAVING是一個過濾聲明,過濾是在查詢數據庫的結果返回之后進行過濾,即在結果返回之后起作用,且having后面可以使用“聚合函數”。注意:having是對查出來的結果進行過濾,那么對沒有查出來的值就不能使用having。之前一直以為having必須與group by一起用,今天試了下,只是一個篩選條件,沒有什么捆綁使用的講究。

 

正確寫法:

select
	orderNumber,
	sum(priceEach * quantityOrdered) as totalvalues
from
	orderdetails
group by
	orderNumber
having sum(priceEach * quantityOrdered) > 60000;

  

另外需要注意的地方是,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] --查詢存儲過程返回的結果集數據
]

 

查詢語句書寫順序須遵循上述規則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM