【问题标题】:Google Spreadsheets: How to query countries with max population by continent?谷歌电子表格:如何按大陆查询人口最多的国家?
【发布时间】:2018-07-01 15:27:26
【问题描述】:

假设我有一张包含国家、大陆和人口列的表格。

如何使用 Google 电子表格中的 QUERY 功能为每个大洲仅选择人口最多的国家/地区?

在常规 SQL 中,我想我会使用 HAVING,但这似乎不是这里的选项。

【问题讨论】:

  • 查看这样的答案stackoverflow.com/questions/42280491/… 它可以归结为 SQL 中的两种方法(1)按人口的降序对每组中的行进行编号(2)丢弃行号 1 或(1)找到每个组中的最大人口(2)将原始表连接到人口最大值表。在我看来,虽然 TheMaster 的解决方案没有明确使用查询,但它仍然使用类似 SQL 的方法(我的方法虽然更费力)并且符合问题的精神。

标签: google-sheets google-query-language


【解决方案1】:
=SORTN(SORT(G:J,4,0),2^99,2,3,0)
  • 如果尚未完成,按人口降序排序
  • 使用 SORTN 删除重复项

【讨论】:

  • SORTN 用法很漂亮!
  • @Max 谢谢。在这个被遗忘的功能上投入时间得到了回报:)
  • =SORTN(SORT(G2:J,4,0),2^99,2,3,0)不是更合适。我确实同意这是一个非常优雅和理想的答案,但它实际上并没有回答这个问题。 OP 使用QUERY 命令寻求解决方案。
  • @Tedinoz 查询 0.7 是不可能的。
  • @TheMaster 实际上,删除该评论。 Tom Sharpe 的回答很巧妙,但我承认它不是经典的 SQL-like 查询语句。
【解决方案2】:

我建议使用辅助列,例如 K:

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

在K2中并复制下来以适应,然后:

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

【讨论】:

    【解决方案3】:

    我在 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)})
    

    虽然这个名单(我想)会一直到梵蒂冈城(大约有 1,000 个),但大多数国家至少有几千名居民,所以我想联系不太可能:-)


    更新 - 人口数据

    【讨论】:

    • 汤姆的答案适用于人口数据。 1) 降序:=ArrayFormula({unique(filter(I:I,I:I&lt;&gt;"")), 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)}).
    • 汤姆的答案适用于人口数据。 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)})
    【解决方案4】:

    在QUERY方法中选择大陆,人口的最大值,需要按大陆分组:

    =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
    

    【讨论】:

    • OP 想要国家
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多