2017-01-21 9 views
0

У меня вопрос в моем домашней работе для SQL о выборе максимальных значений из тех же таблиц, которые имеют различные класса «Письмо»SQL запроса для выбора максимума из 2-х разных столбцов

Например:

ID Student  Group Avg(value) 
------------------------------------- 
1  stud1  A  9 
2  stud2  A  9.5 
3  stud3  B  8 
4  stud4  B  8.5 

Что должен сделать мой запрос, так это показать stud2 и stud4.The максимум из их соответствующих групп.

Мне удалось сделать это в конце, но это заняло много персонажей, поэтому я подумал, что, возможно, есть более короткий путь. Есть идеи? Я сначала искал идентификатор или шпильку, у которой максимальная средняя величина (значение) из группы А, пересекающаяся с идентификатором шпильки, которая имеет максимальное значение (значение) из B, а затем помещает все в один большой выбор, а затем использует те, которые пересекаются Идентификаторы в другой запрос, который попросил показать некоторые разные вещи об этих идентификаторах. Но, как я уже сказал, он слишком долго смотрел и думал, что, возможно, есть более короткий путь.

ответ

0

Попробуйте это (я переименовал группу GRP и СРЕДНЕМ к avg_val как те зарезервированные ключевые слова):

select t1.* 
from your_table t1 
inner join (
    select grp, max(avg_val) avg_val 
    from your_table 
    group by grp 
) t2 on t1.grp = t2.grp 
and t1.avg_val = t2.avg_val; 

Он находит максимальное значение Avg для каждой группы и присоединяется к ней с исходной таблицей, чтобы получить соответствующие студентов.

Обратите внимание, что если есть несколько учеников с таким же средним значением, что и максимальное значение этой группы, все эти ученики будут возвращены.

+0

Я забыл указать, что ID, Student и Group из одной таблицы с именем «Studs» и Avg (значение) из другой таблицы с именем «Grades» также, когда я сказал эти числа из avg (value), это с помощью функция avg на тех классах, которые есть у этих учеников. Итак, у stud1 из A есть 6 классов, которые делают avg (значение) равным 9. – DaDoc

+0

Решение выше - это подход, которым вы можете следовать, чтобы решить эту проблему. Вместо имени таблицы your_table вы можете поместить соединение в две таблицы, а не в подзапрос. – GurV

+0

это слишком длинное, но я попробую присоединиться к другому выбору и, надеюсь, сделаю его короче. Запрашиваемый вами вопрос дал мне некоторое представление о том, как сделать его короче – DaDoc

Смежные вопросы