【问题标题】:Count of unique characteristics in duplicate rows table重复行表中的唯一特征计数
【发布时间】:2018-07-22 18:51:20
【问题描述】:

我的表有基于重复 ID 列列出的重复行。重复行可能具有一个或多个具有唯一值的特征列。我正在尝试计算重复行中的哪些特征列具有唯一值。

之前:

+-----+----------+-------------+-----------+------------+
| ID  | charType | charFlavour | charColor | charWeight |
+-----+----------+-------------+-----------+------------+
| 123 | gel      | mint        | blue      | 10gms      |
| 123 | liquid   | mint        | blue      | 10gms      |
| 123 | solid    | mint        | blue      | 10gms      |
| 456 | wood     | orange      | red       | 20gms      |
| 456 | wood     | vanilla     | red       | 20gms      |
| 456 | wood     | raspberry   | red       | 20gms      |
| 456 | wood     | strawberry  | red       | 20gms      |
| 789 | metal    | mango       | yellow    | 25gms      |
| 789 | metal    | mango       | yellow    | 30gms      |
| 789 | metal    | mango       | yellow    | 22gms      |
| 333 | silica   | NA          | magenta   | 11gms      |
| 333 | plastic  | NA          | white     | 11gms      |
| 333 | rubber   | NA          | teal      | 11gms      |
+-----+----------+-------------+-----------+------------+

之后:

+-------------+-----+-----+-----+-----+-------+
|     ID      | 123 | 456 | 789 | 333 | Total |
+-------------+-----+-----+-----+-----+-------+
| charType    |   1 |   0 |   0 |   1 |     2 |
| charFlavour |   0 |   1 |   0 |   0 |     1 |
| charColor   |   0 |   0 |   0 |   1 |     1 |
| charWeight  |   0 |   0 |   1 |   0 |     1 |
+-------------+-----+-----+-----+-----+-------+

这种格式是否可以使用数据透视表或 Google 查询?

【问题讨论】:

  • 如果您将源中的列作为报告中的列,您可能可以使用QUERY。或者,您可以TRANSPOSE QUERY 结果将源列作为报告行。对于您的查询,您似乎想报告"counta(unique(column))>1"-1
  • @tehhowch 是的,我尝试转置源列,但没有让 counta 函数在查询中工作....不确定 unique 是否也有效!
  • 这些是描述您要执行的操作的工作表函数。我怀疑它们在查询语言中是否有效。
  • 是的,我也在为此苦苦挣扎。

标签: google-apps-script google-sheets pivot-table google-query-language google-sheets-query


【解决方案1】:

也许这不是您正在寻找的最优雅的解决方案 - Google 查询语言中的任何函数似乎都不会返回列的所有唯一值。但是这个解决方案应该成功地计算,对于每个属性,有多少个 ID 对应于该属性的多个值。例如,它会计算多个charFlavours 对应多少个ID。以下是要进行的两个步骤/查询:

  1. =QUERY(A1:E, "select A, max(B), min(B), max(C), min(C), max(D), min(D), max(E), min(E) group by A", 1):这将为每个 ID 的每个属性选择按字母/数字顺序排列的最大值和最小值。它将为每个 ID 返回一行,包含 min 和 max 属性值。

  2. 对于每个属性,使用类似=QUERY(G1:O, "select count(G) where H != I", 1) 的内容。如果您有四个属性,则需要其中四个调用;只需将where H != I 更改为与每个属性对应的两列。这些QUERY 调用中的每一个都将生成一个只有一个值的表,ID 的数量对于某个属性具有多个值。

【讨论】:

  • 感谢@MattS。但是,例如,我只列出了 4 个属性列,但有 20 多个。因此,为每一列做一个 max & min 会很长。与其对每次调用都进行查询,不如用一个 ArrayFormula 包裹它一次,对吧?
  • 我不确定我是否理解文本值的最大值和最小值。我得到这个TABLE 和一个计数。我正在尝试为每个重复的行集获取特征列的累积计数,其中特征值可能是唯一的。看我的截图:BeforeAfter
  • 现在不完全确定这种方法是否能解决您的问题。最大值和最小值告诉您,对于该 ID,某个属性是否有多个唯一值。例如,在您提供的屏幕截图中,123 的最大和最小charColor 属性都是blue,这表明 123 的所有颜色都是蓝色的。我们知道 123 只有一种颜色。但如果它们不同,我们将不知道有多少不同的唯一属性值——两个、五个甚至五十个。
  • 嗨@MattS,这是一个例子sheet。它有一个已经完成的示例,分 2 个步骤显示,但使用不同的公式而不是单个公式。您能分享一下您是如何创建结果表的吗?
  • 我在文档中添加了第三张纸,展示了我在回答中的意思。不确定它是否能解决您的问题,但如果不能,希望它至少能提供一些灵感。如果一切都失败了,您也可以尝试使用 Google Apps 脚本编写一个脚本来手动解决计数问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2017-11-09
  • 2018-03-19
  • 2018-04-18
相关资源
最近更新 更多