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

问题描述 投票:0回答:3

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

我将insert语句全部完成并为每一列工作,HireIndex包含的ing范围为1到5。

sql database
3个回答
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);

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;

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;

只是要确定。

© www.soinside.com 2019 - 2024. All rights reserved.