如何解决仅对第一行执行虚拟列
我正在尝试使用一个函数在我的表上创建一个虚拟列。该函数可以自行正确执行,但是当我添加到我的表中时:
SELECT *,table_a.function FROM table_a;
它只对结果的第一行执行函数,并为所有后续行提供相同的输出。
示例函数:
CREATE FUNCTION overnight(table_a)
RETURNS boolean AS
$$
SELECT CASE WHEN (((duration / 60) * 100) + (duration % 60) + departure) >= 2400 THEN TRUE ELSE FALSE END FROM schema.table_a
$$;
如何确保代码对表格的每一行都执行?
谢谢!
解决方法
让您的函数接受您需要的字段,而不是整个表格。
SELECT *,overnight(duration,departure) FROM table_a;
CREATE FUNCTION overnight(duration,departure)
RETURNS boolean AS
SELECT CASE WHEN ... THEN TRUE ELSE FALSE END;
$$;
,
您需要在选择中引用参数并去掉 FROM
子句(它从 table 中选择,而不是从行参数中选择)。
为了避免表名和参数之间的混淆,我强烈建议使用正确的参数名:
CREATE FUNCTION overnight(p_row table_a)
RETURNS boolean AS
$$
SELECT (((p_row.duration / 60) * 100) + (p_row.duration % 60) + p_row.departure) >= 2400;
$$
language sql
stable;
然后你可以这样使用它:
SELECT *,table_a.function
FROM table_a;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。