Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2008, 09:40   #1
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию простенький запрос

Есть таблица СдалЭкзамен(Студент, Дисциплина, Оценка). Нужно из нее выбрать студентов, у которых за все сданные ими экзамены 5 (естессна, повторяться студенты не должны). Подскажите, как это попроще сделать на языке SQL, я полный ламер в синтаксисе.
odi_noki вне форума Ответить с цитированием
Старый 22.11.2008, 21:46   #2
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от odi_noki Посмотреть сообщение
как это попроще сделать .
можно так:

SELECT СдалЭкзамен.Студент
FROM СдалЭкзамен
GROUP BY СдалЭкзамен.Студент
HAVING (((Sum([Оценка])/Count([Студент]))=5));
Abrakadabra вне форума Ответить с цитированием
Старый 23.11.2008, 11:48   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Abrakadabra, +1

а можно ещё проще ;-)

SELECT СдалЭкзамен.Студент
FROM СдалЭкзамен
GROUP BY СдалЭкзамен.Студент
HAVING (AVG([Оценка])=5);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2008, 16:46   #4
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Вам +100, естественно. В первую очередь 1 AVG по-любому лучше Sum+Count+/.
Однако для наглядности было выбрано именно это, с учетом самокритичного мнения автора топика.

Последний раз редактировалось Abrakadabra; 23.11.2008 в 16:52.
Abrakadabra вне форума Ответить с цитированием
Старый 23.11.2008, 20:53   #5
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Ага, спасибо. Проблема была в том, что не знала о конструкции GROUP BY ... HAVING ... Теперь понятно.
odi_noki вне форума Ответить с цитированием
Старый 23.11.2008, 23:37   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

odi_noki, не за что. :-)

Хотелось бы только предупредить о одном нюансе. Обратите внимание, что данный приём решает только конкретно Вашу проблему. Если, вдруг, решите подобным способом искать студентов, у которых все оценки = 4 или 3 - то данный способ не подойдёт (средняя может быть равна 4 при наличии 5 и 3, например...)...
Тогда запрос прийдётся по другому делать!

А язык SQL рекомендую поучить - 100% в программерской жизни пригодится ;-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2008, 08:33   #7
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Обратите внимание, что данный приём решает только конкретно Вашу проблему. Если, вдруг, решите подобным способом искать студентов, у которых все оценки = 4 или 3 - то данный способ не подойдёт (средняя может быть равна 4 при наличии 5 и 3, например...)...
Обижаете. Уж это-то я понимаю, п. ч. мозг и знания английского имеются. Лень учить SQL, это правда
Но раз уж подняли эту тему, то предложите вариант, как сделать запрос на тех студентов, у которых все 4.
odi_noki вне форума Ответить с цитированием
Старый 24.11.2008, 09:03   #8
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от odi_noki Посмотреть сообщение
мозг и знания английского имеются..
это ведь основной инструмент.. тем более Вам уже все разжевали
Abrakadabra вне форума Ответить с цитированием
Старый 26.11.2008, 13:38   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от odi_noki
Но раз уж подняли эту тему, то предложите вариант, как сделать запрос на тех студентов, у которых все 4.
ну. раз уж поднял... ;-)
я бы копнул в сторону IN
Напишу приблизительно, на SQL нужного диалекта переложите сами (сейчас некогда протестировать в ACCESS, но, думаю. что проблем не должно быть...):

Код:
SELECT СдалЭкзамен.Студент  FROM СдалЭкзамен
WHERE СдалЭкзамен.Студент IN (SELECT T1.Студент  FROM СдалЭкзамен T1 где T1.Отметка = 4)
AND
СдалЭкзамен.Студент NOT IN (SELECT T1.Студент  FROM СдалЭкзамен T1 WHERE T1.Отметка <> 4)
GROUP BY СдалЭкзамен.Студент
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.11.2008, 20:37   #10
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

Serge_Bliznykov,
принимается. И мной, и аксессом. Спасибо.
odi_noki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простенький редактор сбоев оборудования smoky Microsoft Office Access 6 06.09.2008 13:32
Помогите написать простенький скрипт Сева Белуччи PHP 1 29.05.2008 17:31
Сделал простенький блокнотик Reaction-s Софт 17 28.04.2008 22:34
нужен простенький скриптик, для спецов 5 мин. работы AndreyD Фриланс 2 21.12.2007 22:13