我正在为学校做一个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。
答案 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;
只是为了确定。