【问题标题】:Build a table with total unique values for each group in Google Spreadsheet在 Google 电子表格中为每个组构建一​​个包含唯一值总数的表格
【发布时间】:2020-10-27 00:13:00
【问题描述】:

我正在使用谷歌电子表格。

假设有一些昆虫科在 A 列中具有以下名称,而在 B 列和 C 列中它们的属是物种的假想名称(它们对于每个属都是唯一的)。

我需要为每个家庭(A 列)拥有唯一的属数。我将在此表 1 之后给出所需的结果。

注意:Culicidae 有 31 行

表 1- 原始表

   A           B               C 
    ---------------------------------
1   Culicidae   Aedes           X
2   Culicidae   Aedes           Y
    Culicidae   Aedes           Z
    Culicidae   Aedes           W
    Culicidae   Aedes           E  
    Culicidae   Anopheles       X
    Culicidae   Anopheles       Y
    Culicidae   Anopheles       Z
    Culicidae   Anopheles       C
    Culicidae   Anopheles       V
    Culicidae   Anopheles       I
    Culicidae   Anopheles       P
    Culicidae   Anopheles       L
    Culicidae   Anopheles       U
    Culicidae   Coquillettidia  A
    Culicidae   Culex           X
    Culicidae   Culex           Y 
    Culicidae   Culex           Z
    Culicidae   Culex           V
    Culicidae   Culex           B
    Culicidae   Culex           N
    Culicidae   Culex           M
    Culicidae   Culex           O
    Culicidae   Culex           P
    Culicidae   Culiseta        A 
    Culicidae   Culiseta        B
    Culicidae   Culiseta        C
    Culicidae   Culiseta        T
    Culicidae   Culiseta        Y
    Culicidae   Orthopodomyia   W 
    Culicidae   Uranotaenia     A
32  Tephritidae Tephritis       X

表 2. 期望的结果

Family            Total Number of Unique Genera
--------------------------------------------------
Culicidae                 7
Tephritidae               1

Culicidae 的 B 列有 7 个唯一值,因此对于这种情况,另一个新表(另一个不同工作表中的表 2)中的最终期望结果应该是 7。

所以我们首先需要找到 Culicidae 的范围(它是动态的 - 今天 Culicidae 的值可以从 A1 到 A31,明天从 A100 到 A130 或其他任何值,并且可以随时间增加或减少,即今天有 31 行,明天可以有 90 行或 29 行......)。理想情况下,它应该在表 2 的 A 列中自动对每个族进行分组。

然后对于 Culicidae 它应该找出 B 列中有多少个独特的属,它们是 7 个独特的值。就是这样。我希望这能解决。

我知道找到唯一值应该是这样的(但这个范围是静态的..而不是动态的......):

=SUMPRODUCT(1/countif($B$1:$B$31,$B$1:$B$31))

主要困难是仅在一个公式中实现正确的范围($B$1:$B$31 或其中是 Culicidae 的数据)(可以是动态的,并将每个家庭分组,如表 2 所示) .

【问题讨论】:

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


    【解决方案1】:

    使用公式:

    =QUERY(SORTN(A1:B, 99^99, 2, 2, 1), 
     "select Col1,count(Col1) 
      where Col1 is not null
      group by Col1
      label count(Col1)''")
    

    【讨论】:

    • 这完美!我得到了 sql 部分。我不知道 2,2,1 部分的含义。其余的可以理解!如果我们想扩展以计算每个族的所有 C 行(A 列)怎么办?我尝试使用下一个修改的 sn-p - 错误必须在 3、3、1 中? =QUERY(SORTN(A1:C, 99^99, 3, 3, 1), "select Col1,count(Col1), count(Col0) where Col1 is not null group by Col0 group by Col1 label count(Col1)''")
    • 99^99 = 所有可能的行。 2 = sortn 的第二种模式导致位于以下列中的相同值折叠。 2 = 需要折叠的列。 1 = 上升模式
    • 谢谢。尽管如此,我仍然需要知道每个科的 C 列总数... Culicidae 会给出 31 个结果,而 Tephritidae 只有一个结果。有了这个它不起作用:=QUERY(SORTN(A1:C, 99^99, 2, 1, 2, 1), "select Col1,count(Col1), count(Col0) where Col1 is not null group by Col0 group by Col1 label count(Col1)''") C 列永远不会为空。
    • 您在第一个问题中没有要求按家庭计算行数。这个查询很容易添加:=QUERY(A:A,"select A, count(A) where A <> '' group by A label count(A) '' ")。如果需要,这两个查询可以组合成一个公式。
    【解决方案2】:

    虽然它可能无法在公式中实现,但使用数据透视表功能将产生您正在寻找的第二个表格,并且是动态的。

    在 Google 表格中,选择您的数据范围(表 1)-> 点击 Data -> 选择 Pivot Table。从那里确认数据范围正确并且选择了新工作表。单击创建,您应该会移动到打开数据透视表编辑器窗格的新工作表。

    要获得所需的输出,如 表 2,请将 Family 添加到 Rows 并将 Genera 添加到 Values。默认情况下,Genera 将按 COUNTA 进行汇总;为了获得唯一计数,您只需将 COUNTA 更改为 COUNTUNIQUE

    此表将自动更新为原始范围内所做的任何更改,但请确保在添加/删除任何新行时更新数据透视表编辑器中的 数据范围。 p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 2021-08-04
      • 2014-10-28
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多