Запрос hiveQL выбирает classID, studName из таблицы 1, где оценка = максимальная (оценка) группа по classID, studName;

Извините за явно плохой запрос в теме, но он точно описывает результат, который я ищу.

У меня есть таблица с classID int, строкой studName, классом int. Мне нужен результат, в котором перечислены все classID, studName, получившие наивысшую оценку по каждому курсу. оценку могут получить несколько учащихся, и каждый из них должен быть указан в порядке убывания сначала по идентификатору класса, а затем по имени studName.

образец вывода: | идентификатор класса | studName| |---------|---------| | 101 | Мэри | | 101 |Нейт | | 101 |Крис | | 102 |Бенджамин | | 103 |Нейт | |103 |Том | и т.д...

мое первое предположение:

SELECT classID, studName from table1 where grade = MAX(grade) group by classID, studName;

но это дает ошибку: ... еще не поддерживаемое место для UDAF 'max'

Я также попытался создать представление:

CREATE VIEW newView as select classID, MAX(grade) from table1 group by classID;

и используя его в подзапросе в операторе where:

select classID, studName from table1 where grade IN (select * from newView) group by classID, studName;

но кажется, что: "Подзапрос может содержать только 1 элемент в списке SELECT"

Я тоже безуспешно перелистал книгу «Apache Hive Essentials».

Я новичок в HiveQL, и этот не дает мне спать по ночам. Любая помощь будет принята с благодарностью.

Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
15
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с вашим SQL -
Вам нужно назвать максимальный столбец, а затем использовать его в предложении IN подзапроса. изменить вид, как показано ниже.

CREATE VIEW newView as select classID, MAX(grade) as maxgrade from table1 group by classID;

Измените свой SQL следующим образом

select classID, studName from table1 where grade IN (select maxgrade from newView) group by classID, studName;

Решение Но этот SQL поможет вам в достижении того, что вам нужно, «найти студентов, получивших максимальную оценку по каждому предмету», путем настройки вашего SQL.

select classID, studName, grade
from table1 
join (select classID mxid, MAX(grade) as maxgrade from table1 group by classID) mx -- this subquery will pick maximum grade in each class.
ON grade =mx.maxgrade and classID = mx.mxid -- This join will select only the students with maximum grade in each class.

Другие вопросы по теме