J'ai un mytable
structuré comme suit et je voudrais compter les occurrences de valeurs pour attribute
dans chaque ligne:
id | attribute
--------------
1 | spam
2 | Egg
3 | spam
Avec
SELECT id, attribute, COUNT(attribute) FROM mytable GROUP BY attribute
Je reçois seulement
id | attribute | count
----------------------
1 | spam | 2
2 | Egg | 1
Mais ce que j'aimerais en conséquence c'est
id | attribute | count
----------------------
1 | spam | 2
2 | Egg | 1
3 | spam | 2
Comment y parvenir?
select
m1.id,
m1.attribute,
(select count(*) from mytable m2 where m2.attribute = m1.attribute)
from
mytable m1
;
Une autre version:
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)
;
Une meilleure version pour les bases de données avec des fonctions analytiques/fenêtres:
select
m1.id,
m1.attribute,
count(*) over (partition by m1.attribute)
from
mytable m1
;