【发布时间】:2014-03-13 21:08:39
【问题描述】:
这是场景。我想根据记录数返回一个 ntiled 结果集。例如:
DO
$BODY$
IF ( SELECT count(*) < 50 FROM (
SELECT * FROM ( SELECT col1, col2, col3 FROM v_my_view) AS cnt; )
THEN
SELECT * FROM ( SELECT col1, col2, col3 FROM v_my_view ) AS qry;
ELSE (
SELECT *, NTILE(5) OVER (ORDER BY col1 DESC) AS my_tile FROM (
SELECT col1, col2, col3 FROM v_my_view ) AS tileme; )
END IF;
END;
$BODY$
请注意,语法是近似的,但意图应该很明显。如果记录集很小,则返回查询,否则返回 ntiled 查询。尝试执行此操作时,我收到了各种错误消息,包括:
不能在非 SETOF 函数中使用 RETURN QUERY
或
查询没有结果数据的目的地
另外,我知道您不应该在生产代码中使用 *。
【问题讨论】:
标签: sql postgresql plpgsql window-functions