В одной из таблиц у меня есть несколько полей с полем ранга против них. Все эти поля имеют общий атрибут группировки, по которому мне нужно найти значение столбца с лучшим ранжированием, которое может существовать в любой из записей группы. Например, рассмотрим данные ниже:
+---------+---------------+-----------+-----------------+-------------+----------------------+------------+
| Country | City | City_Rank | Artist | Artist_Rank | Movie | Movie_Rank |
+---------+---------------+-----------+-----------------+-------------+----------------------+------------+
| USA | Las Vegas | 2 | Louis C.K | 2 | Justice League | 3 |
| USA | New York City | 3 | Michael Flynn | 3 | IT | 1 |
| USA | Los Angeles | 1 | Matt Lauer | 1 | Get Out | 2 |
| UK | Leeds | 2 | Jack Maynard | 3 | Beauty and the Beast | 2 |
| UK | Manchester | 3 | Charlie Gard | 1 | Wonder Woman | 1 |
| UK | London | 1 | Shannon Mathews | 2 | Logan | 3 |
+---------+---------------+-----------+-----------------+-------------+----------------------+------------+
Теперь мне нужен ранг 1 City
, Artist
и Movie
, сгруппированных по Country
в одной записи. Таким образом, ожидаемый результат:
+---------+------------------+--------------------+-------------------+
| Country | Best_Ranked_City | Best_Ranked_Artist | Best_Ranked_Movie |
+---------+------------------+--------------------+-------------------+
| USA | Los Angeles | Matt Lauer | IT |
| UK | London | Charlie Gard | Wonder Woman |
+---------+------------------+--------------------+-------------------+
У меня есть еще много атрибутов, против которых у меня есть поле ранга. Я могу получить желаемый результат, сформировав несколько наборов данных из вышеперечисленного с условием фильтрации для каждого ранжированного поля (где ранг = 1), а затем объединив эти наборы данных по групповому полю.
Однако это довольно затратное дело из-за миллионов записей в таблице, и многократная фильтрация и объединение этого набора данных не кажутся лучшим способом решить эту проблему. Я получил ранги для каждого поля, используя Rank()
функцию Windows, применив к ней некоторую бизнес-логику.
Я хотел бы в дальнейшем решить эту проблему, используя функцию Window, только если это возможно.