- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是在 postgres 手册中:
CREATE or replace FUNCTION mleast(a VARIADIC numeric[])
RETURNS numeric
AS $$
SELECT min($1[i]) FROM generate_subscripts($1, 1) g(i);
$$ LANGUAGE SQL;
SELECT mleast(10, -1, 5, 4.4);
如果我写:(省略 g(i) )
CREATE or replace FUNCTION mleast(a VARIADIC numeric[])
RETURNS numeric
AS $$
SELECT min($1[i]) FROM generate_subscripts($1, 1);
$$ LANGUAGE SQL;
SELECT mleast(10, -1, 5, 4.4);
我收到:错误不存在列 «i»
g(i) 到底是什么?
最佳答案
generate_subscripts 是一个“set-returning function”,调用时会返回多行。这就是为什么它最常放在 FROM 子句中的原因。
默认情况下,Postgres 内置的 generate_subscripts 的结果是匿名的,并且会自动使用任何名称作为句柄,以便在查询的其余部分引用它。这就是 g(i) 的含义;它是 generate_subscripts 返回的表 (g) 和列 (i) 的别名。所以这个表达式:
FROM generate_subscripts($1, 1) g(i)
意思是:
execute the function generate_subscripts and assign its results to a table called "g" with a single column called "i"
或 SQL 形式:
CREATE TABLE g (i integer);
INSERT INTO g SELECT * FROM generate_subscripts(some_array, 1);
SELECT i FROM g ORDER BY i;
如果没有该别名,查询的 SELECT 部分就不知道如何引用 generate_subscripts 生成的结果。
g(i) 和 gs(i) 的使用是 Postgres 世界的惯例。 “g”或“gs”代表“generate_series”或“generate_subscripts”。 “i”是“迭代器”的传统编程变量。您实际上可以使用任何您想要的别名,我鼓励您使用实际引用您正在尝试做的事情的别名,以改进 future 的代码维护。例如:
FROM generate_subscripts( $1, 1 ) 作为特征(feature_no)
These functions are detailed in the PostgreSQL docs , 并且引用 docs on how to write Set Returning Functions 也很有用(向下滚动到 35.4.8. SQL 函数返回集)。一旦您自己编写了一个,就会更清楚为什么您需要一个别名来引用其结果。
关于sql - 在 PostgreSQL 中 : FROM generate_subscripts($1, 1) g(i) 中的 g(i) 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10674735/
我试图理解 PostgreSQL generate_subscripts 函数的第二个参数。 documentation指出第二个参数是应该生成下标的数组的维度: generate_subscript
这是在 postgres 手册中: CREATE or replace FUNCTION mleast(a VARIADIC numeric[]) RETURNS numeric AS $$
我是一名优秀的程序员,十分优秀!