如何根据表b中列的平均值显示表a中的列?

时间:2019-04-28 04:20:16

标签: sql database

我正在为学校做一个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。

3 个答案:

答案 0 :(得分:0)

您缺少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);

答案 1 :(得分:0)

这将起作用:

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;

答案 2 :(得分:0)

如果只需要实习生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;

只是为了确定。