Excel 函数像 SQL group by + count(distinct *) 一样工作吗?

Sol*_*olo 4 worksheet-function microsoft-excel

假设我有一个包含以下数据的 Excel 工作表

代码 (COL A) | 值(列 B)
==============================
  A01 | 10
  A01 | 20
  A01 | 30
  A01 | 10
  B01 | 30
  B01 | 30

是否有像 .. 这样的 Excel 函数?

SELECT CODE, count (Distinct *) FROM TABLE GROUP BY CODE


 代码 | 不同的值计数
====================================
  A01 | 3
  B01 | 1

或者,更好的是,我可以在C列中粘贴一个 Excel 公式以获得如下结果:

 
 代码 (COL A) | 值 (COL B) | 具有匹配代码的不同值计数 (COL C)
================================================== ==============================
  A01 | 10 | 3
  A01 | 20 | 3
  A01 | 30 | 3
  A01 | 10 | 3
  B01 | 30 | 1
  B01 | 30 | 1

我知道我可以使用数据透视表轻松获得此结果。但是,由于报告要求,我必须将“不同计数”列附加到 Excel 工作表中,因此数据透视表不是一个选项。

我最后的手段是使用 Excel 宏(这很好),但在此之前我想了解 Excel 函数是否可以完成此类任务。

Exc*_*lll 6

在单元格 C2 中输入此公式,假设您在第 2 行到第 7 行中有数据,

=SUMPRODUCT(($A$2:$A$7=A2)  /  COUNTIFS($B$2:$B$7, $B$2:$B$7, $A$2:$A$7, $A$2:$A$7))
Run Code Online (Sandbox Code Playgroud)

并将其拖下。

这个怎么运作:

SUMPRODUCT给出一个标量参数列表时,它的工作原理类似于SUM,但它会将一个数组作为参数,而没有特殊的数组条目。

对于与CODEcolumn中的值不匹配的记录,该数组填充了零A。对于匹配的那些,数组填充有1/(the number of records that have the same A and B values as this record). 因此,例如,有两个记录具有 A=A01和 B= 10,因此将这两个记录1/2(½) 输入到数组中。将此视为对重复值的一种加权。每当对这些值求和时,每个唯一 B 值的总和为 1(在示例中,两个记录的总和为 ½+½=1)。这给出了不同记录的计数。

使用您的示例数据的完整示例:

对于 A= 的任何记录A01,公式将返回{½,1,1,½,0,0}=的总和3
对于 A= 的任何记录B01,公式将返回{0,0,0,0,½,½}=的总和1