Postgresql
選擇查詢以檢索具有空值的行
即使其中一個欄位具有空值,我也需要從表中檢索數據。這是一個例子:
Select name, SUM(credit) as credit From expenses Where name like 'vendor0%' and date like '2013%' Group by name Order by name asc
name
此範例僅SUM(credit)
在credit
具有值時才檢索。name
即使credit
根本沒有價值,我也需要從中檢索所有內容。這可能嗎?
當“credit”具有值時,此範例僅檢索“name”和“SUM(credit)”。
您提出的查詢將為每個禮物檢索一行
name
,即使所有關聯credit
的列都是NULL
。你會得到一個值為 NULL 的行SUM(credit)
。聚合函式只是忽略空值sum()
:如果給定表達式的表中不存在該名稱的行,則只有該名稱的行不存在**。**
expenses``WHERE
我假設您想要
.. 只匹配匹配
'vendor0%'
的名稱 .. 但所有這些,即使他們在 2013 年沒有任何費用。
您的查詢可以這樣工作:
SELECT name, SUM(CASE WHEN date LIKE '2013%' THEN credit END) AS credit FROM expenses WHERE name LIKE 'vendor0%' GROUP BY name ORDER BY name
CASE``NULL
如果沒有ELSE
給出分支,則預設為。旁白:您不應該將日期/時間值儲存為文本。使用合適的類型,它有很多優點。
並且不要使用“名稱”或“日期”作為標識符。“名稱”不是描述性名稱,“日期”是標準 SQL 中的保留字,在 Postgres 中是函式和基本類型名稱。
替換
SUM(credit)
為SUM(COALESCE(credit,0))
或SUM(ISNULL(credit,0))
。您沒有說您使用的是什麼數據庫,因此您可能沒有上述兩個功能可用。如果兩者都有,請查看您的文件或執行基準測試以查看哪個(如果有的話)表現更好。