Как подсчитать количество цитирований в таблице комментариев?
Имеется таблица комментариев, которая выглядит следующим образом:
| ID | Created date | Text | Post_ID | User_ID | Parent_Comment_ID |
|---|---|---|---|---|---|
| 1 | ... | comment1 | 1 | 1 | null |
| 2 | ... | comment2 | 1 | 2 | 1 |
| 3 | ... | comment3 | 1 | 3 | 1 |
| 4 | ... | comment4 | 1 | 4 | null |
| 5 | ... | comment5 | 1 | 1 | 4 |
| 6 | ... | comment6 | 1 | 2 | 4 |
Нужно посчитать, сколько было цитирований (ответов на комментарии пользователя) для каждого пользователя.
Для указанной таблицы и данных результат должен выглядеть так:
| User_ID | Quotes |
|---|---|
| 1 | 2 |
| 2 | 0 |
| 3 | 0 |
| 4 | 2 |
Как я понимаю, это нужно реализовывать при помощи иерархического запроса, но как именно это сделать - не понятно.
Ответы (2 шт):
Автор решения: Roman Konoval
→ Ссылка
Такой запрос сделает то, что вам нужно:
SELECT p.User_ID, count(c.ID)
FROM comments p
LEFT JOIN comments c ON (c.Parent_Comment_ID = p.ID)
GROUP BY p.User_ID
Автор решения: 0xdb
→ Ссылка
Как я понимаю, это нужно реализовывать при помощи иерархического запроса
Нет, иерархический запрос тут не нужен, так как глубина вложенности (цитирования) всегда один.
Воспроизводимый пример:
select p.userID, count (c.ID) quoted
from comments p outer apply (
select c.id
from comments c
where c.ParentID = p.ID) c
group by p.UserID
order by p.UserId
Результат:
USERID QUOTED
---------- ----------
1 2
2 0
3 0
4 2