суббота, 26 июля 2014 г.

Совсем заканчиваем с атлетами и Олимпиадой. Вопрос 3.

Which countries have won the most number of medals in swimming?

Найти все страны, когда-либо получавшие медали в плавании, и отсортировать их по количеству медалей в плавании.
Это уже должно быть легко.
На этапе map нам нужно узнать обо всех полученных медалях в плавании с всех странах, которые представляли спортсмены-пловцы. Это хорошее упражнение, потому что оно позволит нам изучить еще один распространенный и очень полезный прием – подсчет количества записей по критерию. Чтобы сделать это, нам потребуется ввести фиктивное поле, описывающее количество спортсменов (одновременно пловцов и Олимпийских чемпионов) в каждой записи. Так как мы анализируем данные о спортсменах (каждый документ в нашей базе данных описывает спортсмена), то это количество, очевидно, равно 1.
from doc in docs.OlympicAthletes
where doc.Sport == "Swimming"
select new 
{
 Country = doc.Country,
 Count = 1
}

Теперь в Reduce  легко посчитать количество медалей в плавании для каждой страны:

from result in results
group result by result.Country into g
select new
{
 Country = g.Key,
 Count = g.Sum(x=>x.Count)
}

Теперь осталось добавить сортировку по полю Count по убыванию (мы делали аналогично, разбирая второй вопрос в самый первый раз) и узнать, что тройка стран-лидеров в медальном зачете по плаванию за все годы проведения Олимпиад следующая:





Ну все, с задачами  про спортсменов-олимпийцев разобрались.

Комментариев нет:

Отправить комментарий