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] --查詢存儲過程返回的結果集數據
]
查詢語句書寫順序須遵循上述規則。