gpt4 book ai didi

sql - 如何在返回 View 行类型集的 pl/pgsql 函数中组合特定行?

转载 作者:行者123 更新时间:2023-11-29 13:37:09 24 4
gpt4 key购买 nike

我有一个 View ,并且我有一个从该 View 返回记录的函数。这是 View 定义:

CREATE VIEW ctags(id, name, descr, freq) AS                               
SELECT tags.conc_id, expressions.name, concepts.descr, tags.freq
FROM tags, concepts, expressions
WHERE concepts.id = tags.conc_id
AND expressions.id = concepts.expr_id;

id 引用表 tags,即引用另一个表 concepts,后者又引用表表达式。以下是表定义:

CREATE TABLE expressions(
id serial PRIMARY KEY,
name text,
is_dropped bool DEFAULT FALSE,
rank float(53) DEFAULT 0,
state text DEFAULT 'never edited',
UNIQUE(name)
);

CREATE TABLE concepts(
id serial PRIMARY KEY,
expr_id int NOT NULL,
descr text NOT NULL,
source_id int,
equiv_p_id int,
equiv_r_id int,
equiv_len int,
weight int,
is_dropped bool DEFAULT FALSE,
FOREIGN KEY(expr_id) REFERENCES expressions,
FOREIGN KEY(source_id),
FOREIGN KEY(equiv_p_id) REFERENCES concepts,
FOREIGN KEY(equiv_r_id) REFERENCES concepts,
UNIQUE(id,equiv_p_id),
UNIQUE(id,equiv_r_id)
);

CREATE TABLE tags(
conc_id int NOT NULL,
freq int NOT NULL default 0,
UNIQUE(conc_id, freq)
);

expressions 也从我的 View (ctags)中引用。 我希望我的函数合并我的 View 的行,这些行在 name 列中具有相等的值,并且引用表 concepts 的行与列 的相等值>equiv_r_id 这样这些行只组合一次,组合的行有一个(无关紧要)ids,descr 列的值是从被组合的行,freq 行包含被组合的行的值的总和。我不知道该怎么做,任何帮助将不胜感激。

最佳答案

基本上,您描述的内容如下所示:

CREATE FUNCTION f_test()
RETURNS TABLE(min_id int, name text, all_descr text, sum_freq int) AS
$x$
SELECT min(t.conc_id) -- AS min_id
,e.name
,string_agg(c.descr, ', ') -- AS all_descr
,sum(t.freq) -- AS sum_freq
FROM tags t
JOIN concepts c USING (id)
JOIN expressions e ON e.id = c.expr_id;
-- WHERE e.name IS DISTINCT FROM
$x$
LANGUAGE sql;

要点:

  • 我完全忽略了 View ctags,因为不需要它。
  • 到目前为止,您也可以将其写为 View ,函数包装器不是必需的。
  • string_agg() 需要 PostgreSQL 9.0+ .否则你必须替换为

    array_to_string(array_agg(c.descr), ', ')

  • 唯一不清楚的部分是:

    and that refer to rows of the table concepts with equal values of the column equiv_r_id so that these rows are combined only once

什么列到底是指concepts表中的哪一列?
concepts.equiv_r_id 究竟等于什么?

如果您能澄清那部分,我也许可以将其合并到解决方案中。

关于sql - 如何在返回 View 行类型集的 pl/pgsql 函数中组合特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7203216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com