SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.05.2011 18:44:14

amigo
Участник
Зарегистрирован: 01.05.2011
Сообщений: 2

Повторение данных в таблице, и их сложение\удаление.

Здраствуйте.
В MySQL я новичок. Использую mysql-5.1.56 + MySQL Maestro.

Сам код:


DROP TABLE IF EXISTS subj,student,mark;

/*SUBJect_Table*/
CREATE TABLE subj(
id smallint auto_increment,
PRIMARY KEY(id),
sname varchar(15) not null,
teacher varchar(15) not null);

INSERT INTO subj(sname,teacher)
VALUES('Mathematics','Zvezdeckii T.I.'),('Programming','Soproniuk T.M.'),('Physics','Fesiv I.V');

/*STUDENT_Table*/
CREATE TABLE student(
id smallint auto_increment,
PRIMARY KEY(id),
fname varchar(15) not null,
lname varchar(15) not null);

INSERT INTO student(fname,lname)
VALUES('Verstyuk','Sergey'),('Habuza','Vitaliy'),('Grabchak','Michael'),
('Zaleski','Julius'),('Rakov','Sergey'),('Petrenko','Vitaliy'),('Rapatui','Alexander'),
('Romaniuk','Yuri'),('Hliborob','Ivan'),('Schesnyak','Andrey');

/*MARK_Table*/
CREATE TABLE mark(
id smallint auto_increment,
PRIMARY KEY(id),
student_id smallint,
subj_id smallint,
val smallint,
dateof date);

INSERT INTO mark(student_id,subj_id,val,dateof)
VALUES(1,1,9,'2010.09.11'),(2,1,10,'2010.09.13'),(3,1,7,'2010.09.11'),
(4,1,2,'2010.09.15'),(5,1,6,'2010.09.12'),(6,1,3,'2010.09.12'),
(7,1,7,'2010.09.11'),(8,1,2,'2010.09.11'),(9,1,2,'2010.09.15'),
(10,1,5,'2010.09.13'),
(1,2,7,'2010.09.26'),(2,2,2,'2010.09.27'),(3,2,9,'2010.09.26'),
(4,2,8,'2010.09.29'),(5,2,2,'2010.09.29'),(6,2,5,'2010.09.26'),
(7,2,7,'2010.09.27'),(8,2,8,'2010.09.27'),(9,2,8,'2010.09.28'),
(10,2,6,'2010.09.28'),
(1,3,2,'2010.09.14'),(2,3,2,'2010.09.14'),(3,3,2,'2010.09.14'),
(4,3,7,'2010.09.14'),(5,3,6,'2010.09.16'),(6,3,7,'2010.09.16'),
(7,3,8,'2010.09.14'),(8,3,7,'2010.09.16'),(9,3,10,'2010.09.16'),
(10,3,2,'2010.09.16');

INSERT INTO mark(student_id,subj_id,val,dateof)
VALUES(1,1,6,'2010.10.16'),(2,1,7,'2010.10.16'),(3,1,5,'2010.10.11'),
(5,1,7,'2010.10.11'),(6,1,7,'2010.10.12'),
(7,1,2,'2010.10.11'),(8,1,5,'2010.10.11'),(9,1,2,'2010.10.16'),
(1,2,9,'2010.10.25'),(3,2,10,'2010.10.24'),
(5,2,5,'2010.10.25'),
(7,2,8,'2010.10.27'),(8,2,7,'2010.10.27'),(9,2,9,'2010.10.25'),
(10,2,8,'2010.10.24'),
(2,3,5,'2010.10.12'),(3,3,7,'2010.10.13'),
(4,3,8,'2010.10.12'),(6,3,6,'2010.10.16'),
(7,3,7,'2010.10.14'),(8,3,9,'2010.10.14'),
(10,3,6,'2010.10.16');

INSERT INTO mark(student_id,subj_id,val,dateof)
VALUES(1,1,6,'2011.01.11'),(2,1,8,'2011.01.13'),(3,1,7,'2011.01.11'),
(5,1,8,'2010.09.12'),(6,1,5,'2011.01.12'),
(8,1,9,'2010.09.11'),(9,1,6,'2011.01.15'),
(1,2,7,'2011.01.26'),(3,2,8,'2011.01.26'),
(4,2,7,'2011.01.29'),(5,2,5,'2011.01.29'),(6,2,5,'2011.01.26'),
(7,2,8,'2011.01.27'),(8,2,7,'2011.01.27'),
(10,2,7,'2011.01.28'),
(3,3,7,'2011.01.14'),
(4,3,7,'2011.01.14'),(6,3,8,'2011.01.16'),
(7,3,9,'2011.01.14'),(8,3,8,'2011.01.16'),(9,3,9,'2011.01.16');

SELECT CONCAT(s.fname,' ',s.lname) AS Student, subj.sname AS Subjct, m.val, m.dateof
FROM student AS s, mark AS m, subj
WHERE m.student_id=s.id AND m.subj_id=subj.id /* AND m.dateof<'2010.11.01' */
ORDER BY Subjct;
 


После запуска запроса:

SELECT CONCAT(s.fname,' ',s.lname) AS Student, subj.sname AS Subjct, m.val, m.dateof
FROM student AS s, mark AS m, subj
WHERE m.student_id=s.id AND m.subj_id=1 /* AND m.dateof<'2010.11.01' */
ORDER BY Subjct;
 


мы получаем таблицу с именами студентов, с предметами, балами и датами, когда эти оценки были поставлены.
Как видно по коду, балы заносятся один, два или три раза.
Подскажите, как реализовать запрос подсчета минимального\среднего\максимального бала для КАЖДОГО студента?

Заранее благодарен.

Отредактированно amigo (01.05.2011 18:45:11)

Неактивен

 

#2 01.05.2011 22:58:01

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Повторение данных в таблице, и их сложение\удаление.

Просто SELECT MIN(val), ... GROUP BY Student, Subject?

Вместо MIN — AVG или MAX для среднего и максимального баллов.

Неактивен

 

#3 02.05.2011 23:35:27

amigo
Участник
Зарегистрирован: 01.05.2011
Сообщений: 2

Re: Повторение данных в таблице, и их сложение\удаление.

paulus написал:

Просто SELECT MIN(val), ... GROUP BY Student, Subject?

Вместо MIN — AVG или MAX для среднего и максимального баллов.

Виноват. Благодарю. В след. раз, обещаю, без прочтения теории на форум не буду заходить и создавать такие глупые темы. Тему можно закрыть.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson