Таблицы Google: как запрашивать страны с максимальным населением по континентам?

Допустим, у меня есть таблица со столбцами страны, континента и населения.

Как я могу использовать функцию ЗАПРОС в таблицах Google, чтобы выбрать для каждого континента только страну с наибольшей численностью населения?

В обычном SQL я бы использовал HAVING, но здесь это не вариант.

введите здесь описание изображения


person Cos    schedule 01.07.2018    source источник
comment
Глядя на такой ответ, как этот stackoverflow.com/questions/42280491/ он сводится к двум подходам в SQL: либо (1) пронумеровать строки в каждой группе в порядке убывания численности населения (2) отбросить номера строк ‹›1 или (1) Найдите максимальное население в каждой группе (2) Присоедините исходную таблицу к таблице максимумов населения. Мне кажется, что, хотя решение TheMaster явно не использует запрос, оно по-прежнему использует метод, подобный SQL (как и мой, хотя и более трудоемкий), и соответствует духу вопроса.   -  person Tom Sharpe    schedule 11.01.2019


Ответы (4)


=SORTN(SORT(G:J,4,0),2^99,2,3,0)
  • СОРТИРОВАТЬ по населению в порядке убывания, если это еще не сделано
  • Удалить дубликаты с помощью SORTN
person TheMaster    schedule 01.07.2018
comment
SORTN использование красивое! - person Max Makhrov; 04.07.2018
comment
@Макс Спасибо. Время, потраченное на эту забытую функцию, окупилось :) - person TheMaster; 04.07.2018
comment
Не правильнее было бы сказать =SORTN(SORT(G2:J,4,0),2^99,2,3,0). Я согласен с тем, что это чрезвычайно элегантный и желательный ответ, но на самом деле он не отвечает на вопрос. ОП запросил решение с помощью команды QUERY. - person Tedinoz; 10.01.2019
comment
@Tedinoz Это невозможно с запросом 0.7. - person TheMaster; 10.01.2019
comment
@TheMaster Я понимаю, что вы имеете в виду по поводу запроса 0.7 (Думаю. Я не эксперт!). Но тогда что вы думаете об ответе Тома Шарпа? - person Tedinoz; 10.01.2019
comment
@TheMaster На самом деле, ударь по этому комментарию. Ответ Тома Шарпа гениален, но я признаю, что это не классический подобный SQL оператор запроса. - person Tedinoz; 10.01.2019

Я предлагаю вспомогательный столбец, скажем, K с:

=if(maxifs(J:J,I:I,I2)=J2,"#","")  

в K2 и скопировано до нужной масти, то:

=query(G:K,"select I,H,J where K is not NULL")
person pnuts    schedule 01.07.2018

Пара предложений (оба немного длинные), где у меня есть ранг, страна и континент в столбцах A, B и C (извините, мне потребовалось бы слишком много времени, чтобы ввести население)

Чтобы получить список в порядке убывания ранга:

=ArrayFormula({unique(filter(C:C,C:C<>"")),
vlookup(Query(A:C,"select min(A) where A is not null group by C order by min(A) label min(A) 'Rank'"),A:C,2,false)})

Чтобы получить список континентов в алфавитном порядке:

=ArrayFormula({Query(A:C,"select C,min(A) where A is not null group by C label min(A) 'Rank'"),
vlookup(Query(A:C,"select min(A) where A is not null group by C label min(A) 'Rank'"),A:C,2,false)})

Хотя список (я полагаю) идет вплоть до Ватикана (около 1000 человек), в большинстве стран проживает не менее нескольких тысяч человек, поэтому я думаю, что связи маловероятны :-)

введите здесь описание изображения


ОБНОВЛЕНИЕ – с данными о населении
введите здесь описание изображения

person Tom Sharpe    schedule 01.07.2018
comment
Ответ Тома работает с данными о населении. 1) По убыванию: =ArrayFormula({unique(filter(I:I,I:I<>"")), vlookup(Query(G:J,"select min(G) where G is not null group by I order by min(G) label min(G) 'Rank'"),G:J,2,false),vlookup(Query(G:J,"select min(G) where G is not null group by I order by min(G) label min(G) 'Rank'"),G:J,4,false)}). - person Tedinoz; 10.01.2019
comment
Ответ Тома работает с данными о населении. 2) Альфа по континентам:=ArrayFormula({Query(G:J,"select I,min(G) where G is not null group by I label min(G) 'Rank'"), vlookup(Query(G:J,"select min(G) where G is not null group by I label min(G) 'Rank'"),G:J,2,false),vlookup(Query(G:J,"select min(G) where G is not null group by I label min(G) 'Rank'"),G:J,4,false)}) - person Tedinoz; 10.01.2019

В методе ЗАПРОС выберите Континент, максимальное количество населения и нужно сгруппировать по Континенту:

=QUERY(Countries,"select I, max(J) GROUP BY I",1)

Это вернет следующие результаты из таблицы:

Continent       max Population
Africa          173615345
Asia            1385566537
Australia       23342553
Europe          82726626
North America   320050716
South America   200361925
person Abhishek    schedule 14.01.2019
comment
ОП хочет страну. - person Tedinoz; 15.01.2019