使用 聚合函式(aggregate function)時,SQL語句的返回值的注意事項

rainbow702發表於2017-02-21

假設有如下一條SQL語句

SELECT 
    AVG(xuo.`attach_succ_rate`) AS `attach_succ_rate`
FROM
    `xdr_user_oriented` AS `xuo`
WHERE
    xuo.`id` < -1 

其中 xuo.`id` < -1 這個條件,正常情況下,肯定是不會滿足的(沒有哪個資料庫的 id 是比 0 小的)。
所以,我就理所當然地認為,這條SQL語句是不會有返回值的。
但事實卻狠狠的打了我的臉:
這裡寫圖片描述
work bench 的控制檯日誌來看,這條SQL語句是有返回值的,返回的是一條attach_succ_rate欄位的值為 NULL 的記錄。

也正是因為這樣,導致了今天專案中(使用的是 iBatis ORM 框架),丟擲了一個 NPE。查詢了半天,才定位是這個原因。

所以,在這裡備註一下,以免日後再犯同樣的錯。

PS: 只要SQL語句中使用了 聚合函式 (avg()、sum()、max()。。。等) 的,都會出現這種情況。
但是我未在哪份正式的DB文件中找到與此有關的說明,若有誰知道的話,還請留個連結給我,謝謝:)

相關文章