Поиск нескольких средних значений(AVG) по разным ключам и так же с COUNT
- Написать запрос, в котором будет показана средняя успеваемость (оценка - score) по каждому предмету в виде title, средняя оценка
(Средняя успеваемость не одного ученика, а именно по данному предмету)
Не понимаю, как взять среднее значение по определённым предметам
Нашел что-то на данную тему и пытался реализовать:
SELECT (SELECT title FROM subjects) avg1, (SELECT AVG(score) FROM scores) avg2;
Однако ошибка использования агрегатных функций
2. Написать запрос, в котором будут отображены ученики (name) у которых есть оценки(score) по всем предметам
Пытался написать:
select _name from students, subjects, scores
where students.st_id = scores.st_id and subjects.subj_id = scores.subj_id and count(score) = count(subj_id);
Однако ошибка использования групповой функции
Создание таблиц (если нужно):
CREATE TABLE students (
st_id INT UNIQUE PRIMARY KEY AUTO_INCREMENT,
_name TEXT
);
CREATE TABLE subjects (
subj_id INT UNIQUE PRIMARY KEY AUTO_INCREMENT,
title TEXT,
hours INT unsigned -- Целое число >= 0
);
CREATE TABLE scores (
score_id INT UNIQUE PRIMARY KEY AUTO_INCREMENT,
st_id INT,
subj_id INT,
score INT CHECK(score >= 2 AND score <= 5),
FOREIGN KEY (st_id) REFERENCES students (st_id) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (subj_id) REFERENCES subjects (subj_id) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE INDEX (st_id, subj_id)
);
Источник: Stack Overflow на русском