2014-09-24 4 views
1

Для базы данных студентов в следующем форматеПоиск первой строки в группе с помощью Pig

Roll Number | School Name | Name | Age | Gender | Class | Subject | Marks 

Как узнать, кто получил самый высокий для каждого класса? Следующий запрос возвращает всю группу, но мне интересно найти первую строку в группе.

grouped_records = group students by (school, class, roll); 
agg_records = foreach grouped_records generate flatten(group),SUM(students.marks) as total; 
ordered_records = order agg_records by school, class, total desc; 
dump ordered_records; 

ответ

2
-- Find out total marks of each student. 
grouped_records = group students by (school, class, roll); 
agg_records = foreach grouped_records generate flatten(group) as (school, class, roll), SUM(students.marks) as total; 

-- Order students from each school, class pair by total and find highest marks roll 

agg_records2 = group agg_records by (school, class); 
ordered_records = foreach agg_records2 { 
       ordered = order agg_records by total desc; 
       first = limit ordered 1; 
       generate flatten(group),first.roll; 
      } 

dump ordered_records; 
Смежные вопросы