Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/65: Рейтинг темы: голосов - 65, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 10
1

Ученики( запрос на отличников )

10.08.2012, 10:31. Показов 13230. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть 2 таблицы. Помогите написать запрос, который бы выводил ФИО отличников, тоисть только тех, у которых по всем 11-им предметам стоит оценка 5 .

Главная:


Вот 2:



Додумался только до такого :

'select fio, id_predmet, ocinka
from yspiwnist
inner join fio on fio.id_yspiwnist = yspiwnist.id_yspiwnist
where ocinka like '5''



Оно выводит просто все оценки 5.

Буду очень благодарен за любую помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2012, 10:31
Ответы с готовыми решениями:

Запрос с группировкой БД Ученики
Всем добрый день. Не думал, что меня настолько затупит простейшая, на первый взгляд, задачка......

Запрос на выбор отличников
Вроде должно быть легко, а никак не додуматься(( Нужно выбрать всех студентов отличников. Но если я...

Определить количество отличников 1-2 курса на всех факультетах группы у которых нет отличников
// Сторити масив структур, яки складаються з елементів: факультет, курс, група, призвіще...

Пойду в ученики
Зовут Денис, 16 лет,живу в Одессе(Украина),пойду в ученики к опытному программисту, можно не очень...

15
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
10.08.2012, 11:39 2
можно так:
MySQL
1
2
3
4
5
6
7
SELECT all_fio.fio, all_fio.id_predmet, all_fio.ocinka
FROM
(select fio, id_predmet, ocinka, avg(ocinka) as avg_oc
from yspiwnist 
inner join fio on fio.id_yspiwnist = yspiwnist.id_yspiwnist
group by fio.id) AS all_fio
WHERE all_fio.avg_oc = 5
Не проканает для четверошников
Могут, конечно, возникнуть проблемы, если поле оценок имеет тип текстовый, придется пробовать преобразовывать в числа. (навеяно "where ocinka like '5''")
1
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 10
10.08.2012, 11:42  [ТС] 3
большое спасибо. С меня "+1 спасибо"
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
10.08.2012, 11:44 4
если число предметов постоянное
SQL
1
2
3
4
5
6
SELECT fio, COUNT(*)
FROM yspiwnist 
INNER JOIN fio ON fio.id_yspiwnist = yspiwnist.id_yspiwnist 
WHERE ocinka = 5
GROUP BY fio
HAVING COUNT(*) = 11
1
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
10.08.2012, 11:49 5
_ViPeR_, Я конечно не ас запросов, но мне кажется что вы просто выбираете записи с оценкой 5
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
10.08.2012, 12:33 6
To mamedovvms
Там выбираются все ученики и все их оценки во внутреннем запросе. AVG считает среднее значение по полю ocinka, группировка идет по id каждого ученика, таким макаром получаем список всех учеников и их так называемый средний балл. Из полученного набора выбираем только те записи, у которых средний балл равен 5. Учитывая, что оценки более 5 нет, то единственная возможная ситуация, когда средний балл будет равен 5 - это когда все оценки по всем предметам = 5.
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
10.08.2012, 12:40 7
Цитата Сообщение от _ViPeR_
Учитывая, что оценки более 5 нет, то единственная возможная ситуация, когда средний балл будет равен 5 - это когда все оценки по всем предметам = 5.
Это так, но при этом не учитывается условие
у которых по всем 11-им предметам
Т.е. если человек не сдавал несколько предметов, то он все равно попадет в список
0
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 10
10.08.2012, 12:52  [ТС] 8
SQL
1
2
3
4
SELECT fio AS ФІО, avg(ocinka) AS Середній_бал
FROM fio, yspiwnist
WHERE id_yspiwnist = id_ys
GROUP BY fio


Почему после этого не работает оператор like?
and 'Середній_бал' like '%5,0000%'


Только начал изучать sql. Так что если вопрос очень глупый, прошу меня простить.
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
10.08.2012, 13:02 9
LIKE служит не для этого, он служит для поиска подстроки в строке. А шаблонный символ % служит для замены любого кол. произвольных символов. Например, я хочу выбрать все строки, начинающиеся на А:
SQL
1
WHERE fld1 LIKE 'А%'
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
10.08.2012, 13:10 10
Цитата Сообщение от _ViPeR_ Посмотреть сообщение
AVG считает среднее значение по полю ocinka
_ViPeR_, прошу прощение не внимательно прочитал

Добавлено через 1 минуту
Только встречный вопрос, а если оценка будет текстовым полем тогда я как понимаю среднее уже не получиться взять?????
0
99 / 99 / 27
Регистрация: 26.01.2012
Сообщений: 342
Записей в блоге: 1
10.08.2012, 13:12 11
Scrydz, у меня похожая задача- хранение данных об успеваемости, но у меня только одна таблица, в которой столбцы Имя фамилия и предметы, при увеличении кол-ва предметов придется увеличивать кол-во столбцов, у вас я вижу, все совсем по другому, немогли бы вы пояснить как тут все происходит?
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
10.08.2012, 13:16 12
Цитата Сообщение от Destank
немогли бы вы пояснить как тут все происходит?
Согласно правилам нормализации. Одна таблица - справочник студентов, вторая - справочник предметов, третья таблица - успеваемость студентов со ссылками на первые два справочника
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
10.08.2012, 13:49 13
а если оценка будет текстовым полем тогда я как понимаю среднее уже не получиться взять?????
Получится, только букафки будут как 0 восприниматься
0
0 / 0 / 0
Регистрация: 16.11.2011
Сообщений: 10
10.08.2012, 15:21  [ТС] 14
что еще надо добавить в запрос, чтобы выбило только тех , у которых средний бал 5,0000?)

0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
10.08.2012, 15:32 15
после GROUP BY добавь
SQL
1
HAVING AVG(ocinka) = 5
1
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.08.2012, 15:32 16
SQL
1
HAVING `Середнiй_бал` = 5
1
10.08.2012, 15:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2012, 15:32
Помогаю со студенческими работами здесь

Ученики школы С++
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в...

Нормализация бд Ученики
Есть БД, нужно проставить оценки всем ученикам, как будет лучше разбить по таблицам? Просто у...

Запросы в access бд ученики
ребят помогите вот у меня есть база данных, где данные на учеников 10-х А,Б,Ц, 11-х А,Б,Ц, ...

БД ученики музыкальной школы
Всем привет. Нужно сделать БД в Access. Предметная область Музычная школа, БД Ученики школы. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru