Как отобразить столбец в таблице a на основе среднего значения столбца в таблице b? - PullRequest
0 голосов
/ 28 апреля 2019

Я делаю проект 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 голосов
/ 28 апреля 2019

это будет работать:

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 голосов
/ 28 апреля 2019

Нет 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;

, просто чтобы быть уверенным.

0 голосов
/ 28 апреля 2019

Отсутствует предложение 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...