我正在试图操纵一个艺术品和它们所存储的收藏的数据库。我想要的是显示所有收藏的名称、其中的艺术品数量和所有艺术品的价格总和,但需要注意的是,如果价格总和返回为空,则我希望将该收藏排除在印刷品之外。有些艺术品列出了价格,有些则设置为零。
这是我的代码,我还没有想出一种方法来执行该警告而不引入意外行为。
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;
我知道第三行引入了一个错误,这是我所能做的最好的展示我的思维过程。如果排除第三行,则返回预期的输出,但某些集合的总和为空的情况除外。
1条答案
按热度按时间hk8txs481#
首先,请注意sum()返回组中NOT-NUUL值的总和,因此只有当集合的所有价格都为空时,它才会返回空。如果一个图稿的价格为空,但同一集合中的其他图稿的值不为空,则sum()不为空。
如果这是您想要的结果,您只需使用HAVING子句而不是WHERE:
相反,如果您想要排除至少包含空定价图稿的收藏:
Count(Price)计算非空价格的数量,而count(*)计算集合中的总行数,因此只有当所有价格都不为空时,它们才相等。