【问题标题】:How to Count Unique Values From a Repeated List in Priority with a Cell - Google Spreadsheets如何使用单元格优先计算重复列表中的唯一值 - Google 电子表格
【发布时间】:2026-02-23 20:10:01
【问题描述】:

我有一个包含四列的电子表格:

question_id  user_id   unique_question_ids   # of unique_user_ids
X            11        X                     ? (=2)
X            12        Y                     ? (=3)
X            12
X            12
Y            13
Y            14
Y            15

前两列是问题及其对应的用户,包括两者的重复。

目标是:我想计算每个独特问题的唯一用户数。

我首先找到了使用 UNIQUE 函数找到的 unique_questions。这列出了 unique_question_ids 列中哪些问题是唯一的(即 X、Y)

现在我想计算每个唯一问题的唯一用户数?另一个问题是我不知道 X 和 Y 从哪里开始,但是它们仍然按顺序排序(实际电子表格非常大)。

我该怎么做呢?我想我可以使用 COUNTIFS 但这不算唯一值。我还考虑使用一个函数来返回 X 或 Y 在 question_id 列中的位置范围,然后在下一列(即 user_id)中计算唯一值。但我找不到返回列中值的单元格范围的函数。我也在 Google 电子表格上这样做。

任何想法或想法将不胜感激,谢谢

【问题讨论】:

    标签: excel google-sheets


    【解决方案1】:

    假设您的数据从单元格 A1 开始,您可以在单元格 C1 中使用此公式:

    =ARRAYFORMULA(QUERY(UNIQUE(A2:B8),"SELECT Col1, COUNT(Col2) GROUP BY Col1 LABEL Col1 'unique_question', COUNT(Col2) 'unique_users'",-1))
    

    它基本上是一个 SQL 查询,使用来自 unique(A2:B8) 的唯一值并根据第一列值计算第二列中的值。

    Google Spreadsheet sample


    一些解释:

    经过UNIQUE()后的Unique表数据是这样的:

    question_id  user_id
    X            11 
    X            12 
    Y            13
    Y            14
    Y            15
    

    SQL 语言(特定于 GoogleSpreadsheet)是这样的:

    SELECT                         -- From the data,
        Col1,                      -- select column 1 (unique question_id)
        COUNT(Col2)                -- select the count of column 2 (unique user_id)
    GROUP BY
        Col1                       -- group by the first column *
    LABEL
        Col1 'unique_question',    -- label the first column as 'unique_question'
        COUNT(Col2) 'unique_users' -- label the second column as 'unique_users'
    
    • 将聚合函数应用于列时,例如COUNT() 是一个聚合函数,您必须在其他列上使用 GROUP BY 来决定它们应该发生什么。

    例如,如果你在上面的数据上使用这个:

    SELECT
        COUNT(Col2)
    

    您最终会得到5(这是一行),因为它正在计算表数据中的所有行。如果你尝试:

    SELECT
        Col1,
        COUNT(Col2)
    

    您最终会得到 5 行 Col1 和 1 行函数结果,这是不允许的。所以,你需要GROUP BY 告诉 Col1 中所有相似的值都应该占据一行,这样你就有一行 X 和一行 Y 然后,计数将通过计算所有的来适应这个分组XY 分开。

    【讨论】:

    • 嗨,杰瑞,非常感谢您的帮助,我真的很感激。我以前从未使用过查询语言,您介意解释一下函数的工作原理以及字符串 "SELECT Col1, COUNT(Col2) GROUP BY Col1 LABEL Col1 'unique_question', COUNT(Col2) 'unique_users'",-1" 的含义吗?
    • @user3527095 我添加了一些解释。希望它更清楚:)
    • 嗨,杰瑞,非常感谢您的帮助,尤其是提供了详细的解释。我非常感谢您为帮助人们所做的一切。
    最近更新 更多