MYSQL количество повторяющихся значений - PullRequest
0 голосов
/ 06 июня 2018

Я хочу посчитать то же значение для parent_id, но не считать при наличии значения '0'.

table:t_article
id_article      parent_id
441             0
1093            18
18              0
3141            3130
3130            0
3140            3130
3142            3130

Ожидаемый результат

id_article      parent_id       Total
441             0               0
1093            18              1
18              0               0
3141            3130            3
3130            0               0
3140            3130            3
3142            3130            3

Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Вот еще один подход, использующий внутреннее соединение и условное агрегирование

select a.*, b.cnt
from t_article a
join (
  select parent_id, sum(parent_id <> 0) cnt
  from t_article 
  group by parent_id
) b using(parent_id)

Демо

0 голосов
/ 06 июня 2018

Вы также можете использовать подзапрос:

SELECT id_article,parent_id,(SELECT COUNT(parent_id) FROM t_article as t2  WHERE t2.parent_id = t1.parent_id AND t2.parent_id != 0 ) AS total  FROM `t_article` as  t1

Результат

enter image description here

0 голосов
/ 06 июня 2018

Похоже, вы хотите, чтобы итоговый столбец представлял количество дочерних элементов, которое имеет данный parent_id, что совпадает с числом этого значения parent_id.Вы можете попробовать присоединиться к подзапросу, который находит значения:

SELECT
    t1.id_article,
    t1.parent_id,
    COALESCE(t2.Total, 0) AS Total
FROM t_article t1
LEFT JOIN
(
    SELECT parent_id, COUNT(*) AS Total
    FROM t_article
    WHERE parent_id <> 0
    GROUP BY parent_id
) t2
    ON t1.parent_id = t2.parent_id;

enter image description here

Демо

...