计算sql中每一行属性值的多次出现

Joc*_*rze 5 count

我的mytable结构如下,我想计算attribute每一行中值的出现次数:

id | attribute
--------------
1  | spam
2  | egg
3  | spam
Run Code Online (Sandbox Code Playgroud)

SELECT id, attribute, COUNT(attribute) FROM mytable GROUP BY attribute
Run Code Online (Sandbox Code Playgroud)

我只得到

id | attribute | count
----------------------
1  | spam      | 2 
2  | egg       | 1
Run Code Online (Sandbox Code Playgroud)

但我想要的结果是

id | attribute | count
----------------------
1  | spam      | 2 
2  | egg       | 1
3  | spam      | 2
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标?

Bal*_*app 9

select
  m1.id, 
  m1.attribute, 
  (select count(*) from mytable m2 where m2.attribute = m1.attribute) 
from
  mytable m1
;
Run Code Online (Sandbox Code Playgroud)

另一个版本:

select
  m1.id,
  m1.attribute,
  m2.c
from
  mytable m1
  join (SELECT attribute, COUNT(attribute) as c FROM mytable GROUP BY attribute) m2
  on (m1.attribute = m2.attribute)
;
Run Code Online (Sandbox Code Playgroud)

具有分析/窗口函数的数据库的更好版本:

select
  m1.id,
  m1.attribute,
  count(*) over (partition by m1.attribute)
from
  mytable m1
;
Run Code Online (Sandbox Code Playgroud)