Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос с арифметикой
 
 автор: herotic   (10.06.2011 в 15:20)   письмо автору
 
 

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

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

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

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

Дамп базы:


--
-- Структура таблицы `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);

  Ответить  
 
 автор: cheops   (10.06.2011 в 15:31)   письмо автору
 
   для: herotic   (10.06.2011 в 15:20)
 

Можно начать отталкиваться от следующего запроса
SELECT kurs, COUNT(*) AS tot FROM students
GROUP BY kurs
HAVING tot > (SELECT COUNT(*) FROM students WHERE kurs = 1)

  Ответить  
 
 автор: herotic   (10.06.2011 в 15:35)   письмо автору
 
   для: herotic   (10.06.2011 в 15:20)
 

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);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования