如何根据表 B 中一列的平均值显示表 A 中的列



我正在为学校做一个sql项目,其中一个要求是"列出所有平均雇用指数为3.5或更高的实习生"。我该怎么做?

CREATE TABLE Intern (
internID INT PRIMARY KEY REFERENCES Person(personID)
,School VARCHAR(255) DEFAULT NULL
,Major VARCHAR(255) DEFAULT NULL
,ExpGradDate VARCHAR(255) DEFAULT NULL
);
CREATE TABLE Evaluation (
HireIndex INT(1) DEFAULT NULL
,EvalID INT DEFAULT NULL
,FOREIGN KEY (EvalID) REFERENCES Intern(internID)
);

以下是我尝试过的,但它不起作用。我收到错误代码 1111:组函数使用无效。

SELECT internID
FROM intern 
INNER JOIN evaluation ON intern.internID = evaluation.EvalID
WHERE AVG(evaluation.HireIndex >= 3.5);

我已经完成了插入语句,并且适用于每一列,HireIndex 包含从 1 到 5 的整数。

您缺少GROUP BY子句,WHERE子句中的限制(用于组(应移至HAVING子句。

SELECT
    i.internID
FROM intern i
INNER JOIN evaluation e
    ON i.internID = e.EvalID
GROUP BY
    i.internID
HAVING
    AVG(e.HireIndex >= 3.5);
这将

起作用:

SELECT i.internID,avg(e.HireIndex)
FROM intern i
INNER JOIN evaluation e ON i.internID = e.EvalID
group by i.InterId
having avg(e.HireIndex)>=3.5;

如果您只需要实习生 ID,则此查询不需要JOIN

SELECT e.EvalID
FROM ievaluation e
GROUP BY e.EvalID
HAVING AVG(e.HireIndex) >= 3.5;

您没有指定数据库,尽管代码看起来像 MySQL。 上述方法适用于MySQL,因为MySQL会将整数转换为平均值的数字。 有些数据库只做整数平均值(所以 2 和 3 和 2 的平均值,而不是 2.5。 所以,我经常写这样的逻辑:

HAVING AVG(e.HireIndex * 1.0) >= 3.5;

只是为了确定。

最新更新