我正在嘗試操作藝術品資料庫及其存盤的收藏品。我想要的是顯示所有收藏品的名稱,其中的藝術品數量以及所有藝術品價格的總和,需要注意的是,如果價格的總和回傳為 null,那么我想從列印中排除該集合。有些藝術品列出了價格,有些則將它們設定為空。
這是我的代碼,我無法找到一種方法來執行該警告而不引入意外行為。
SELECT COLLECTION.NAME, COUNT(ARTWORK.ARTWORKID), SUM(ARTWORK.PRICE)
FROM ARTWORK JOIN COLLECTION ON ARTWORK.COLLECTIONID = COLLECTION.COLLECTIONID
WHERE SUM(PRICE) IS NOT NULL
GROUP BY COLLECTION.NAME
ORDER BY COLLECTION.NAME;
我知道第三行引入了一個錯誤,這是我能做的最好的展示我的思考程序。如果排除第三行,這將回傳預期的輸出,但某些總和值為空的集合除外。
uj5u.com熱心網友回復:
首先,請注意 sum() 回傳組中非 NUUL 值的總和,因此只有當集合的所有價格都為 NULL 時,它才會回傳 NULL。如果一件藝術品的價格為空,但同一收藏的其他藝術品的值不為空,則 sum() 不會為空。
如果這是您想要的結果,您只需使用 HAVING 子句而不是 WHERE:
SELECT COLLECTION.NAME, COUNT(ARTWORK.ARTWORKID), SUM(ARTWORK.PRICE)
FROM ARTWORK JOIN COLLECTION ON ARTWORK.COLLECTIONID = COLLECTION.COLLECTIONID
GROUP BY COLLECTION.NAME
HAVING SUM(PRICE) IS NOT NULL
ORDER BY COLLECTION.NAME;
相反,如果您想排除至少具有 NULL 價格藝術品的收藏:
SELECT COLLECTION.NAME, COUNT(ARTWORK.ARTWORKID), SUM(ARTWORK.PRICE)
FROM ARTWORK JOIN COLLECTION ON ARTWORK.COLLECTIONID = COLLECTION.COLLECTIONID
GROUP BY COLLECTION.NAME
HAVING COUNT(PRICE) = COUNT(*)
ORDER BY COLLECTION.NAME;
COUNT(PRICE) 計算非空價格的數量,而 COUNT(*) 計算集合中的總行數,因此只有當所有價格都不為空時,它們才會相等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/514000.html
標籤:sqlite
