选择查询以检索具有空值的行

1 postgresql null aggregate select

即使其中一个字段具有空值,我也需要从表中检索数据。下面是一个例子:

Select name, SUM(credit) as credit
From expenses
Where name like 'vendor0%'
and date like '2013%'
Group by name
Order by name asc
Run Code Online (Sandbox Code Playgroud)

此示例检索nameSUM(credit)只有当credit具有价值。name即使credit根本没有任何价值,我也需要从中检索所有内容。

这可能吗?

Erw*_*ter 7

当“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
Run Code Online (Sandbox Code Playgroud)

CASENULL如果没有ELSE给出分支,则默认为。
旁白:您不应该将日期/时间值存储为文本。使用合适的类型,它有很多优点。
并且不要使用“名称”或“日期”作为标识符。“名称”不是描述性名称,“日期”是标准 SQL 中保留字,也是 Postgres 中的函数和基本类型名称。