Есть 2 таблицы
CREATE TABLE student (
id int(10) NOT NULL AUTO_INCREMENT,
name varchar(50) BINARY DEFAULT NULL,
status tinyint(4) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO `student` (`name`, `status`) VALUES ('Вася', '1')
INSERT INTO `student` (`name`, `status`) VALUES ('Петя', '1');
INSERT INTO `student` (`name`, `status`) VALUES ('Коля', '1');
INSERT INTO `student` (`name`, `status`) VALUES ('Света', '1');
CREATE TABLE grade (
id int(11) NOT NULL AUTO_INCREMENT,
student_id int(11) NOT NULL,
date datetime NOT NULL,
grade enum('1','2','3','4','5') NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('1', '2013-09-04 10:10:10', '5');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('1', '2013-09-04 10:10:10', '4');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('2', '2013-09-04 10:10:10', '3');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('2', '2013-09-04 10:10:10', '4');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('1', '2013-10-04 10:10:10', '3');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('3', '2013-09-04 10:10:10', '5');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('3', '2013-10-04 10:10:10', '3');
INSERT INTO `grade` (`student_id`, `date`, `grade`) VALUES ('3', '2013-09-04 10:10:10', '3');
Должно получиться что-то вроде этого
'Вася', '2013-09', '4.5'
'Вася', '2013-10', '3'
'Коля', '2013-09', '4'
'Коля', '2013-10', '3'
'Петя', '2013-09', '3.5'
'Петя', '2013-10', '---'
'Света', '2013-09', '---'
'Света', '2013-10', '---'
Как видно из вывода светы нет связи вообще, а у пети только за сентябрь есть
но нужно вывести за оба месяца
Добавлено через 01:56 сек.
Я сделал подобный запрос, но не знаю как вывести все месяцы даже если нет связи
SELECT s.name, DATE_FORMAT(g.date, '%Y-%m') ym, CAST(IFNULL(AVG(g.grade), '---') AS CHAR(3))
FROM student s
LEFT JOIN grade g ON s.id = g.student_id
GROUP BY s.name, ym;