imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 07.10.2010, 22:52     # 1
Платон
Newbie
 
Регистрация: 07.10.2010
Сообщения: 6

Платон Нуль без палочки
Вопрос по MS SQL

Есть 2 таблицы students(id,name) и results (id,subject,mark)
Нужен запрос, который выведет список студентов с максимальным средним баллом.
Платон вне форума  
Старый 07.10.2010, 23:15     # 2
Little Squirrel
Newbie
 
Регистрация: 04.02.2003
Адрес: Prague
Сообщения: 43

Little Squirrel Нимб уже пробиваетсяLittle Squirrel Нимб уже пробивается
Во второй таблице id является идентификатором строки или идентификатором студента, к которому данная строка относится?
Little Squirrel вне форума  
Старый 07.10.2010, 23:35     # 3
Платон
Newbie
 
Регистрация: 07.10.2010
Сообщения: 6

Платон Нуль без палочки
Цитата:
Сообщение от Little Squirrel Посмотреть сообщение
Во второй таблице id является идентификатором строки или идентификатором студента, к которому данная строка относится?
идентификатором студента,т.е. по нему связаны эти таблицы
Платон вне форума  
Старый 08.10.2010, 15:41     # 4
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Полагаю вв results уже средние оценки? Сколько студентов надо (добавьте в запрос после select с нужным количеством TOP N)?
Код:
SELECT * FROM students s JOIN results r ON (s.id = r.id)
Помоему все просто элементарно. Если это не то что нужно, описываете трудности, с которыми столкнулись, подробнее.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 08.10.2010, 16:14     # 5
Платон
Newbie
 
Регистрация: 07.10.2010
Сообщения: 6

Платон Нуль без палочки
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Полагаю вв results уже средние оценки? Сколько студентов надо (добавьте в запрос после select с нужным количеством TOP N)?
Код:
SELECT * FROM students s JOIN results r ON (s.id = r.id)
Помоему все просто элементарно. Если это не то что нужно, описываете трудности, с которыми столкнулись, подробнее.
нет в results находятся все отметки по всем предметам, - средний бал нужно найти!
а в самом результате вывести имена студентов только с максимальными средними баллами.
т.е. нужно написать подзапрос, который простой для не новичков, но я затрудняюсь
Платон вне форума  
Старый 08.10.2010, 17:30     # 6
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от Платон Посмотреть сообщение
нет в results находятся все отметки по всем предметам, - средний бал нужно найти!
Тогда нужно агрегатный AVG с группировкой.

Цитата:
Сообщение от Платон Посмотреть сообщение
а в самом результате вывести имена студентов только с максимальными средними баллами.
То есть только один максимум, или, если есть такие же?
Думаю как-то так тогда:
Код:
SELECT TOP 1 WITH TIES name, AVG(mark) as avg_mark FROM students s JOIN results r ON (s.id = r.id) GROUP BY s.id
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 08.10.2010, 17:43     # 7
Платон
Newbie
 
Регистрация: 07.10.2010
Сообщения: 6

Платон Нуль без палочки
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Тогда нужно агрегатный AVG с группировкой.

То есть только один максимум, или, если есть такие же?
Есть такие же,- вот в чём вся проблема для меня
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Думаю как-то так тогда:
Код:
SELECT TOP 1 WITH TIES name, AVG(mark) as avg_mark FROM students s JOIN results r ON (s.id = r.id) GROUP BY s.id
Так, только средние баллы получаем, и это всё понятно. Вообщем, не знаю как подзапрос сделать в котором должен быть вот этот самый код.
Платон вне форума  
Старый 08.10.2010, 17:50     # 8
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от Платон Посмотреть сообщение
Так, только средние баллы получаем, и это всё понятно.
Ну так Вам только средние и имя и надо же. Впрочем Вы правы, сортировку я забыл добавить:
Код:
SELECT TOP 1 WITH TIES name, AVG(mark) as avg_mark FROM students s JOIN results r ON (s.id = r.id) GROUP BY s.id ORDER BY avg_mark DESC
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 08.10.2010, 18:07     # 9
Платон
Newbie
 
Регистрация: 07.10.2010
Сообщения: 6

Платон Нуль без палочки
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Ну так Вам только средние и имя и надо же.
мне надо макимальные средние и имя;
ведь среди средних баллов для разных студентов, могут быть и тройки и четверки - нужно выбрать с максимальными баллами т.е. с пятерками или четверками если пятерок нет....
Платон вне форума  
Старый 08.10.2010, 19:02     # 10
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Так запрос и выберет именно:
Цитата:
Сообщение от Платон Посмотреть сообщение
макимальные средние и имя
AVG посчитает среднее, ORDER BY avg_mark DESC упорядочит так чтобы максимальные были сверху, TOP 1 вернет только один верхний результат, WITH TIES остальные результаты с таким же значением. Вроде именно то что Вы хотели.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 08.10.2010, 19:14     # 11
Платон
Newbie
 
Регистрация: 07.10.2010
Сообщения: 6

Платон Нуль без палочки
Цитата:
Сообщение от Hubbitus Посмотреть сообщение
Так запрос и выберет именно:

AVG посчитает среднее, ORDER BY avg_mark DESC упорядочит так чтобы максимальные были сверху, TOP 1 вернет только один верхний результат, WITH TIES остальные результаты с таким же значением. Вроде именно то что Вы хотели.
аааа, спасибо, совершенно не знаю синтакиса, поэтому сразу не понял, что WITH TIES СВЯЗЫВАЕТ ИМЕНА.
Теперь всё понятно.
Платон вне форума  
Старый 08.10.2010, 20:36     # 12
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Сообщение от Платон Посмотреть сообщение
поэтому сразу не понял, что WITH TIES СВЯЗЫВАЕТ ИМЕНА.
WITH TIES ничего не связывает совершенно! Не очень понял о чем Вы, но единственное что здесь связывает таблицы это JOIN. Все остальное что делает подробно расписал выше в посте.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:43.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.