SQL如何选择列中具有相同值的记录数

jud*_*ead 2 sql oracle select count

我有一张桌子,基本上是这样设置的:

Question | Category
=========|=========
Who?     |Vague
What?    |Vague
When?    |Specific
Why?     |Specific
How?     |Specific
Run Code Online (Sandbox Code Playgroud)

我想选择所有问题,但我也想返回与当前选择的条目属于同一类别的条目数量,如下所示:

Question | Category | Count
=========|==========|======
Who?     |Vague     |2
What?    |Vague     |2
When?    |Specific  |3
Why?     |Specific  |3
How?     |Specific  |3
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Gor*_*off 5

在 Oracle(和大多数其他数据库)中,您只需使用分析函数:

select t.*, count(*) over (partition by category) as cnt
from t;
Run Code Online (Sandbox Code Playgroud)

在 MySQL 中,相关子查询可能是最好的方法:

select t.*, (select count(*) from t t2 where t2.category = t.category) as cnt
from t;
Run Code Online (Sandbox Code Playgroud)