我的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)
如何实现这一目标?
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)
| 归档时间: |
|
| 查看次数: |
40744 次 |
| 最近记录: |