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)
此示例检索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
Run Code Online (Sandbox Code Playgroud)
CASENULL如果没有ELSE给出分支,则默认为。
旁白:您不应该将日期/时间值存储为文本。使用合适的类型,它有很多优点。
并且不要使用“名称”或“日期”作为标识符。“名称”不是描述性名称,“日期”是标准 SQL 中的保留字,也是 Postgres 中的函数和基本类型名称。