GROUP BY表中一列中的所有值,以及另一表中的平均值.错误:FROM子句



我正在尝试检索每个main_url的平均分数。然而,每个分数由post_id标识,并且每个post与main_url相关联。

然而,我收到了一条奇怪的错误消息:

ERROR:  missing FROM-clause entry for table "post"
LINE 1: ..._url_id LEFT JOIN score c ON b.post_id = c.post....
^

我不明白,因为我有一个FROM子句。我编写的所有其他LEFT JOIN查询都只需要一个FROM子句。

"total"值在分数表中。

这是我的问题:

`
SELECT main_url, AVG(total)
FROM main_url a 
LEFT JOIN post b ON a.main_url_id = b.main_url_id
LEFT JOIN score c ON b.post_id = c.post.id
GROUP BY main_url
`

这些是表格:

CREATE TABLE main_url(
main_url_id   SERIAL PRIMARY KEY,
main_url      VARCHAR(2100)
);

CREATE TABLE post(
post_id       SERIAL PRIMARY KEY,
post_title    VARCHAR (2100),
author_id     INTEGER,
post_url      VARCHAR(2100),
main_url_id   INTEGER 
);

CREATE TABLE score(
score_id    SERIAL PRIMARY KEY,
detail      INTEGER,
prose       INTEGER,
s_g         INTEGER,
like_it     INTEGER,
total       INTEGER,
post_id     INTEGER,
account_id  INTEGER
);

假设main_url是唯一的,我建议根据id而不是url本身进行聚合——这应该更有效。

此外,别名使用表格缩写,而不是任意字母。并限定所有列引用。因此:

SELECT mu.main_url, AVG(s.total)
FROM main_url mu LEFT JOIN
post p
ON p.main_url_id = mu.main_url_id LEFT JOIN
score s
ON s.post_id = p.post.id
GROUP BY  mu.main_url_id;

如果main_url不是唯一的,那么在main_url中,则需要按该列进行聚合。然而,如果你可以避免聚集在一个多达数千个字符的字符串上,你最好避免它

您需要加入c.post_id

SELECT main_url, AVG(total)
FROM main_url a 
LEFT JOIN post b ON a.main_url_id = b.main_url_id
LEFT JOIN score c ON b.post_id = c.post_id
GROUP BY main_url

相关内容

  • 没有找到相关文章

最新更新