SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.06.2011 13:59:05

ehotron
Участник
Зарегистрирован: 10.06.2011
Сообщений: 4

Запрос с арифметикой

Приветствую, помогите, пожалуйста, вот с таким вот запросом.

Есть база данных, которая состоит из двух таблиц, студентов и курсов.

Необходимо построить запрос, который будет вычислять курсы, на которых учится больше студентов, чем на первом курсе.

Что-то никак не могу допереть как его построить.

Дамп базы:


--
-- Структура таблицы `kurses`
--

CREATE TABLE IF NOT EXISTS `kurses` (
  `id` int(7) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE cp1251_general_cs NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs AUTO_INCREMENT=6 ;

--
-- Дамп данных таблицы `kurses`
--

INSERT INTO `kurses` (`id`, `title`) VALUES
(1, 'Первый курс'),
(2, 'Второй курс'),
(3, 'Третий курс'),
(4, 'Четвертый курс'),
(5, 'Пятый курс');

-- --------------------------------------------------------

--
-- Структура таблицы `students`
--

CREATE TABLE IF NOT EXISTS `students` (
  `id` int(7) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE cp1251_general_cs NOT NULL,
  `surname` varchar(255) COLLATE cp1251_general_cs NOT NULL,
  `patr` varchar(255) COLLATE cp1251_general_cs NOT NULL,
  `kurs` int(7) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs AUTO_INCREMENT=22 ;

--
-- Дамп данных таблицы `students`
--

INSERT INTO `students` (`id`, `name`, `surname`, `patr`, `kurs`) VALUES
(1, 'Вася', 'Пупкин', 'Пупкинович', 1),
(2, 'Петя', 'Баранов', 'Суперович', 1),
(3, 'ваыпыв', 'ывапывап', 'апывапыв', 1),
(4, 'ывпвы', 'пывп', 'пвап', 1),
(5, 'Василий ', 'іваі', 'аіваі', 2),
(6, 'віаів', 'аів', 'аіва', 2),
(7, 'іва', 'іва', 'іваів', 2),
(8, 'віаіва', 'аіва', 'іваів', 2),
(9, 'іваів', 'аіва', 'іваів', 2),
(10, 'віаіва', 'аіва', 'іваів', 2),
(11, 'іваів', 'іва', 'аіва', 3),
(12, 'іва', 'аіва', 'ів', 3),
(13, 'ів', 'аіваі', 'ваів', 3),
(14, 'ваі', 'аі', 'віаів', 4),
(15, 'іваів', 'аів', 'аі', 4),
(16, 'іваів', 'аів', 'аіва', 4),
(17, 'іваіва', 'іва', 'іва', 4),
(18, 'іва', 'іваі', 'ваів', 4),
(19, 'іваіва', 'іва', 'іва', 4),
(20, 'ів', 'аів', 'аіва', 5),
(21, 'іва', 'іваів', 'аіва', 5);

Неактивен

 

#2 10.06.2011 15:18:36

D.Demon
Участник
Зарегистрирован: 10.06.2011
Сообщений: 10

Re: Запрос с арифметикой

Как то так:

SELECT k.title, count(s.kurs) as cnt
FROM kurses as k
LEFT JOIN students as s ON k.id = s.kurs
GROUP BY k.id
HAVING cnt > (SELECT count(s.kurs) FROM  students as s WHERE s.kurs=1 GROUP BY s.kurs);

Неактивен

 

#3 10.06.2011 15:22:54

ehotron
Участник
Зарегистрирован: 10.06.2011
Сообщений: 4

Re: Запрос с арифметикой

Спасибо огромное, работает! Не могли бы вы расписать подробнее комментарии к каждый строчке, что мы мне было понятнее понять это все дело?

Неактивен

 

#4 10.06.2011 15:36:54

D.Demon
Участник
Зарегистрирован: 10.06.2011
Сообщений: 10

Re: Запрос с арифметикой

ehotron написал:

Спасибо огромное, работает! Не могли бы вы расписать подробнее комментарии к каждый строчке, что мы мне было понятнее понять это все дело?

Давай ты скажешь, что в запросе не понятно, а я отвечу.

Неактивен

 

#5 10.06.2011 15:38:23

ehotron
Участник
Зарегистрирован: 10.06.2011
Сообщений: 4

Re: Запрос с арифметикой

Не могу понять, зачем GROUP BY k.id

Неактивен

 

#6 10.06.2011 15:50:26

D.Demon
Участник
Зарегистрирован: 10.06.2011
Сообщений: 10

Re: Запрос с арифметикой

ehotron написал:

Не могу понять, зачем GROUP BY k.id

Указываю по какому полю сгруппировать записи и считать их количество.

Для наглядности выполни запросы:
SELECT k.title, s.*
FROM kurses as k
LEFT JOIN students as s ON k.id = s.kurs
Получишь список курсов и студентов одной таблицей.

Если сделаешь так
SELECT k.title, count(s.kurs)
FROM kurses as k
LEFT JOIN students as s ON k.id = s.kurs
Считает все строки без разбора.

А указав по какому полю объединить строки - MySQL сделает то, что тебе надо.

Неактивен

 

#7 10.06.2011 16:00:16

ehotron
Участник
Зарегистрирован: 10.06.2011
Сообщений: 4

Re: Запрос с арифметикой

Супер! Спасибо большое! smile

Неактивен

 

Board footer

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