【问题标题】:Filter matched list in Google Sheets QUERY在 Google 表格 QUERY 中过滤匹配列表
【发布时间】:2019-06-30 23:41:06
【问题描述】:

我有一个正在改进的团队排行榜。以下是我试图简化的步骤:
1。使用 ImportHTML 函数导入表格
2。使用 Query 功能选择所需的列
3。使用 Filter 函数过滤列中的信息以仅包含与指定预先存在的列表中的名称匹配的名称。
4。 按分数对数据进行排序

这是我的示例工作簿的链接:https://docs.google.com/spreadsheets/d/1F0w-7bW8Wbh-eJubyBubeMM_yMzzcSZw28R0OJ-l8q8/edit#gid=1646904068

您可以从“IS 热身”表中看到之前的完成方式。在精简其他工作表之前,我正在尝试在“IS-Individual”中精简它。 “姓名”表包含我要为其提取结果的团队成员。

   =Sort(
  Filter(
    QUERY(
      IMPORTHTML("https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1","TABLE",1),
     "SELECT Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13" & match(Names!A:A,COL1),
Match(Names!A:A,0)),2,True))

我也试过了:

=Sort(Filter(QUERY(IMPORTHTML("https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1","TABLE",1),"SELECT Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13"),Match(QUERY(IMPORTHTML("https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1","TABLE",1),"SELECT Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13"),Names!A:A,0)),2,True)

【问题讨论】:

    标签: filter google-sheets google-sheets-formula google-sheets-query google-query-language


    【解决方案1】:
    =SORT(FILTER(QUERY(IMPORTHTML(
     "https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1",
     "TABLE", 1),
     "SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13"),
     MATCH(INDIRECT("Names!A1:A"&COUNTA(QUERY(IMPORTHTML(
     "https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1",
     "TABLE", 1),
     "SELECT Col1"))+1), 0)), 2, 1)
    


    如果导入的表格大小不变,这也可以:

    =SORT(FILTER(QUERY(IMPORTHTML(
     "https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1",
     "TABLE", 1),
     "SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13"),
     MATCH(Names!A1:A89, 0)), 2, 1)
    

    【讨论】:

    • 我认为这很接近,但由于某种原因,产生的名称不限于“名称”表中标识的名称。我试着玩了一下,但不知道如何纠正它。有什么想法吗?
    • 它关于范围不匹配...如果您有过滤器范围 A1:A10 则参数需要具有相同的大小,例如:=filter(A1:A10, B1:B10="x" ) 如果不是,那么您会收到如下错误:=filter(A1:A10, B1:B9="x")。在您的情况下,查询的输出有 89 行(因为 importhtml 有 89 行),您尝试根据 Names!A:A 过滤检查它,并且该范围等于 982 行导致错误
    • 我没有收到官方错误 (#VALUE,#NAME,#N/A) 只是意外结果。在 AP 列中返回的名称有 8 个在名称表中列出的名称,但还包括 32 个未出现在名称表中的其他名称。不幸的是,在实际使用 google sheet 时,导入的表格会经常变化。有没有办法检查导入范围的行数,附加虚拟行,然后匹配名称?
    • 附加虚拟行如下:
    • =ARRAYFORMULA(SORT(FILTER({QUERY(IMPORTHTML( "https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1", "TABLE", 1), "SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13"); SUBSTITUTE(SPLIT(TRANSPOSE(SPLIT(REPT("♦♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠♣♠", ROWS(Names!A1:A)-COUNTA(QUERY(IMPORTHTML( "https://ct.thecmp.org/app/v1/index.php?do=match&task=getMatchResultsDetail&MatchId=18095&EventId=7&AwardId=1", "TABLE", 1), "SELECT Col1", 0))-1), "♦")), "♠"), "♣", )}, MATCH(Names!A1:A, 0)), 1, 1, 2, 1))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多