我正在尝试检索每个主url的平均分数。但是,每个分数都由一个post\u id标识,并且每个post都与一个主\u url相关联。
但是,我收到一个奇怪的错误消息:
ERROR: missing FROM-clause entry for table "post"
LINE 1: ..._url_id LEFT JOIN score c ON b.post_id = c.post....
^
我不明白,因为我有from子句。我编写的所有其他左连接查询只需要一个from子句。
“total”值在score表中。
我的问题是:
`
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
);
2条答案
按热度按时间aamkag611#
假设
main_url
是唯一的,我建议按id聚合,而不是按url本身聚合--这样应该效率更高。另外,使用表中的别名缩写,而不是任意字母。并限定所有列引用。所以:
如果
main_url
不是唯一的,那么在main_url
,则需要按该列进行聚合。但是,如果可以避免在最多包含数千个字符的字符串上进行聚合,则最好避免使用它。vatpfxk52#
你需要用c.post\u id加入