基于另一列的SQL计数列数



这里的问题很简单,但我没有任何数据可以测试,所以我不确定它是否正确。

假设我有一张看起来像这样的桌子:

+---------+---------+
| ColumnA | ColumnB |
+---------+---------+
|       1 | a       |
|       2 | a       |
|       3 | a       |
|       3 | b       |
|       4 | a       |
|       5 | a       |
|       6 | a       |
|       6 | b       |
|       6 | c       |
|       7 | a       |
+---------+---------+

我想为每一列a计算b列中不同项目的数量。

因此,结果表如下所示:

+---------+---------+
| ColumnA | Count   |
+---------+---------+
|       1 |       1 |
|       2 |       1 |
|       3 |       2 |
|       4 |       1 |
|       5 |       1 |
|       6 |       3 |
|       7 |       1 |
+---------+---------+

我该怎么做?

我一直在尝试这样的东西:

dense_rank() over (partition by ColumnA order by ColumnB) count

您可以将GROUP BYCOUNTDISTINCT:一起使用

SELECT ColumnA, COUNT(DISTINCT ColumnB) AS [Count]
FROM MyTable 
GROUP BY ColumnA

dbfiddle.uk上的演示

最新更新