GROUP BY All Values From One Column in a Table, With Averages From Another Table. Error: FROM-clause
GROUP BY All Values From One Column in a Table, With Averages From Another Table. Error: FROM-clause
我正在尝试检索每个 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'的值,在分数TABLE.
这是我的查询:
`
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
);
您需要加入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
假设 main_url
是唯一的,我建议按 id 聚合而不是 url 本身——那样应该更有效率。
此外,别名使用 table 缩写,而不是任意字母。并限定所有列引用。所以:
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
中,您需要按该列进行聚合。但是,如果您可以避免在包含多达数千个字符的字符串上进行聚合,则最好避免它。
我正在尝试检索每个 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'的值,在分数TABLE.
这是我的查询:
`
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
);
您需要加入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
假设 main_url
是唯一的,我建议按 id 聚合而不是 url 本身——那样应该更有效率。
此外,别名使用 table 缩写,而不是任意字母。并限定所有列引用。所以:
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
中,您需要按该列进行聚合。但是,如果您可以避免在包含多达数千个字符的字符串上进行聚合,则最好避免它。