Postgresql

選擇查詢以檢索具有空值的行

  • February 14, 2018

即使其中一個欄位具有空值,我也需要從表中檢索數據。這是一個例子:

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))

您沒有說您使用的是什麼數據庫,因此您可能沒有上述兩個功能可用。如果兩者都有,請查看您的文件或執行基準測試以查看哪個(如果有的話)表現更好。

引用自:https://dba.stackexchange.com/questions/56717