SQL - select 增量值或 return 常量

SQL - select an increment value or return a constant

所以我需要做的是 select 列的最大值(并每次将其递增 1),如果该值为空(第一次出现时就是这种情况),我必须return 常数 0(这将是下一次出现的最大值)。

我的目标是做这样的事情:

SELECT (Max(id) + 1) FROM my_table WHERE id IS NOT NULL
UNION
SELECT 0 FROM my_table WHERE id IS NULL

然而那是行不通的。我能做什么?

SELECT (MAX(CASE WHEN id IS NULL THEN 0 ELSE id END) + 1) FROM my_table

试试这个

SELECT COALESCE(Max(id + 1), 0) FROM my_table WHERE id IS NOT NULL

按照您的查询编写方式,它将 return 两行。一个用于第一个查询,一个用于联合之后。

如果您只需要一行,您可以只使用 MAX() 函数。如果 table 为空,则 MAX() 函数 return 为空。然后,您可以选择在 select 语句中使用 COALESCE(),其中 return 是第一个非空值。换句话说,这个查询:

SELECT COALESCE(MAX(id) + 1, 0) AS maxID
FROM myTable;

可以解释为:给我table中最大的ID。如果 table 为空,则 return 0.

这是一个 fiddle 示例,其中包含一个空 table 和一个非空 table。