Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > помогите составить запрос


Автор: AlexanderI 30.3.2006, 01:06
помогите составить запрос

Есть таблица учеников "Ученики". В ней 2 поля "ID" и"Фамилия".
И Таблица "Оценки" . В ней поля "ID ученика", "Двойки", "Пятёрки".
Нужно составить запрос чтобы вывелось всё в одной таблице: фамилия ученика, его общее количество двоек, и в третей колонке его общее количество пятёрок.

Автор: Бонифаций 30.3.2006, 01:37
навскидку не проверяя

Код


select u.familiya ,count(o.dvojki),count(o.piaterki) from u4eniki u left join otsenki o on (o.id_u4enika = u.id) group by u.familiya


Автор: MFoxer 30.3.2006, 02:41
>В ней поля "ID ученика", "Двойки", "Пятёрки".
Это оценки или количество ?

Бонифаций - ты облажался, заведомо.
1) не left join - в Inner
2) group by u.familiya - не стандарт ANSI, group by только для агрегируемых функеций в запросе.
Хотя может у Вас там В МуSQL - это за правило smile))





Автор: Secandr 30.3.2006, 07:39
MFoxer, будь по проще и люди потянутся!


AlexanderI, страная структура таблиц. Мне кажется можно было бы организовать по другому... Привити полную структуру таблиц и что ты хочешь от них добиться?

Автор: Ignat 30.3.2006, 08:44
Цитата(MFoxer @ 30.3.2006, 02:41 Найти цитируемый пост)
group by только для агрегируемых функеций в запросе.

COUNT перестала быть агрегатной функцией? smile

Цитата(MFoxer @ 30.3.2006, 02:41 Найти цитируемый пост)
1) не left join - в Inner

А вот нифига. При этом если ученику не найдена ни одна запись оценок, он исчезнет из результатов выборки. smile

Цитата(MFoxer @ 30.3.2006, 02:41 Найти цитируемый пост)
2) group by u.familiya - не стандарт ANSI,

В ANSI отменили агрегирование? smile

Цитата(MFoxer @ 30.3.2006, 02:41 Найти цитируемый пост)
Хотя может у Вас там В МуSQL - это за правило

А у Вас это где?

Автор: AlexanderI 30.3.2006, 10:20
Извините, вчера так с этим загнался, что тал неправилную задачу.

Есть таблица учеников "Ученики". В ней 2 поля "ID" и"Фамилия".
И Таблица "Оценки" . В ней 3 поля "ID ученика", "Двойки" и дополнительное поле "Temp".
"Темп" принемает 2 значения 1 и 0.
Нужно составить запрос чтобы вывелось всё в одной таблице: фамилия ученика, его общее количество двоек при "Temp = 0" и общее число двоек при "Temp = 1" .
Добавлено @ 10:24
Цитата(Secandr @ 30.3.2006, 07:39)

AlexanderI, страная структура таблиц. Мне кажется можно было бы организовать по другому... Привити полную структуру таблиц и что ты хочешь от них добиться?

я просто привёл в пример простую таблицу. Мне бы только узнать каким запросом такое делается, а я уж перевёл бы этот запрос в свои (огромные) таблици.
Цитата(Secandr @ 30.3.2006, 07:39)

>В ней поля "ID ученика", "Двойки", "Пятёрки".
Это оценки или количество ?


Это оченки т.е. число 2.

Автор: Berliner 30.3.2006, 14:03
Цитата



Есть таблица учеников "Ученики". В ней 2 поля "ID" и"Фамилия".
И Таблица "Оценки" . В ней 3 поля "ID ученика", "Двойки" и дополнительное поле "Temp".
"Темп" принемает 2 значения 1 и 0.
Нужно составить запрос чтобы вывелось всё в одной таблице: фамилия ученика, его общее количество двоек при "Temp = 0" и общее число двоек при "Temp = 1"

может так? хотя надо еще условие присоеденить Оценки.Temp=1

Код

select  Ученики.Фамилия, count (Оценки.Двойки)  from Ученики left join  Оценки on Ученики.id=Оценки.ID and Оценки.Temp=0

Автор: AlexanderI 30.3.2006, 14:11
Цитата(Berliner @ 30.3.2006, 14:03 Найти цитируемый пост)
может так? хотя надо еще условие присоеденить Оценки.Temp=1


А как это сделат ? мне это и нужно.

Автор: Ignat 30.3.2006, 14:20
Могу предложить такой вариант:

Код

SELECT Ученики.Фамилия, Оценки.Temp, COUNT(Оценки.Двойки)
FROM Ученики LEFT JOIN  Оценки ON Ученики.id=Оценки.ID
GROUP BY Ученики.Фамилия, Оценки.Temp DESC;


Если не то, скажи, что ты хочешь увидеть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)