gpt4 book ai didi

sql - PostgreSQL 中的嵌套聚合函数

转载 作者:行者123 更新时间:2023-12-03 12:17:50 24 4
gpt4 key购买 nike

我试图返回每个 author_id , author_name , 和 AVG(total)authorarticle_group .我想把 author_id 混为一谈, author_name , 和 AVG(total)成数组。我知道此查询将返回 article_group每个数组,但这很好。
我最初尝试放置 AVG(total) (而不是 avg_total )在我的 array_agg() 中.这导致了一条错误消息,指出我不能嵌套聚合函数。
我一直在试图找出解决方法,但似乎无法解决。我尝试在 WHERE 中放置一个子查询条款AS avg_total那没有用。
所以现在我试着把 AS avg_total FROM 之前的独立子查询中的别名条款,它仍然无法正常工作。
这是查询:

        SELECT b.article_group_id, b.article_group,
array_agg('[' || c.author_id || ',' || c.author_name || ',' || avg_total || ']'),
AVG((SELECT total
FROM article f
LEFT JOIN article_to_author w ON f.article_id = w.article_id
LEFT JOIN author v ON w.author_id = c.author_id
LEFT JOIN grade z ON f.article_id = z.article_id
) AS avg_total)

FROM article f
LEFT JOIN article_group b ON b.article_group_id = f.article_group_id
LEFT JOIN article_to_author w ON f.article_id = w.article_id
LEFT JOIN author c ON w.author_id = c.author_id
GROUP BY b.article_group_id, b. article_group

这是当前的错误消息:
    { error: syntax error at or near "AS"
at Connection.parseE (Z:\GitFolder\roqq\server\node_modules\pg\lib\connection.js:614:13)
at Connection.parseMessage (Z:\GitFolder\roqq\server\node_modules\pg\lib\connection.js:413:19)
at Socket.<anonymous> (Z:\GitFolder\roqq\server\node_modules\pg\lib\connection.js:129:22)
at Socket.emit (events.js:198:13)
at Socket.EventEmitter.emit (domain.js:448:20)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
name: 'error',
length: 92,
severity: 'ERROR',
code: '42601',
detail: undefined,
hint: undefined,
position: '430',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'scan.l',
line: '1149',
routine: 'scanner_yyerror' }
这是我的表:
  CREATE TABLE article(
article_id SERIAL PRIMARY KEY,
article_title VARCHAR (2100),
article_group_id INTEGER
);

CREATE TABLE article_to_author(
ata_id SERIAL PRIMARY KEY,
article_id INTEGER,
author_id INTEGER
);

CREATE TABLE author(
author_id SERIAL PRIMARY KEY,
author_name VARCHAR(500)
);

CREATE TABLE grade(
grade_id SERIAL PRIMARY KEY,
detail INTEGER,
s_g INTEGER,
total INTEGER,
article_id INTEGER
);

CREATE TABLE article_group(
article_group_id SERIAL PRIMARY KEY,
article_group VARCHAR(2100)
);

最佳答案

在你的问题中,很多事情都不清楚。根据我对您当前查询的理解,请尝试以下操作:

with cte as (
SELECT ag.article_group_id,
ag.article_group,
au.author_id,
au.author_name,
avg(gr.total) as avg_total
FROM article_group ag
LEFT JOIN article ar on ar.article_group_id=ag.article_group_id
LEFT JOIN article_to_author ata ON ar.article_id = ata.article_id
LEFT JOIN author au ON ata.author_id = au.author_id
LEFT JOIN grade gr ON ar.article_id = gr.article_id
GROUP BY ag.article_group_id, ag.article_group, au.author_id, au.author_name
)
SELECT article_group_id,
article_group,
array_agg('[' || author_id || ',' || author_name || ',' || avg_total || ']')
FROM cte
GROUP BY article_group_id, article_group
您可以在 array_agg 中更改您想要的任何内容
DEMO

关于sql - PostgreSQL 中的嵌套聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63333722/

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