我正在为学校做一个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。
您缺少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;
只是要确定。