Получить все сообщения с самопринятыми ответами в SEDE (Stack Exchange Data Explorer) - PullRequest
0 голосов
/ 22 сентября 2019

Как указано в заголовке, мы ищем все сообщения (включая пользователей, комментарии и предлагаемые изменения), в которых исходный вопросник принял их собственный ответ как лучший ответ.Другими словами, во всех случаях, когда OwnerUserId for PostTypeId 1 = OwnerUserId for PostTypeId 2.

, я борюсь с этим, поскольку у меня нет глубокого понимания схемы SEDE DB.

Это из SEDE примеры, которые получают пользователей с высокими показателями самоприятия (и имеющих> 10 ответов), но нам нужны сообщения с самопринятыми ответами, а не только пользователи.

SELECT TOP 100 
  Users.Id AS [User Link],
  (
    CAST(COUNT(a.Id) AS float) / 
    CAST(
      (
        SELECT COUNT(*) 
        FROM Posts p 
        WHERE p.OwnerUserId = Users.Id 
        AND PostTypeId = 1
      ) 
      AS float
    ) * 100
  ) AS SelfAnswerPercentage
FROM Posts q
  INNER JOIN Posts a ON q.AcceptedAnswerId = a.Id
  INNER JOIN Users ON Users.Id = q.OwnerUserId
WHERE q.OwnerUserId = a.OwnerUserId
GROUP BY Users.Id, DisplayName
HAVING COUNT(a.Id) > 10
ORDER BY SelfAnswerPercentage DESC

1 Ответ

0 голосов
/ 22 сентября 2019

Можете ли вы опубликовать ожидаемый результат?А схема ваших таблиц?

Я не знаком с вашей схемой БД, но это может быть отправной точкой:

SELECT q.*
FROM posts q -- Get all posts
INNER JOIN posts a ON q.AcceptedAnswerId = a.Id
  AND q.OwnerUserId = a.OwnerUserId AND a.PostTypeId = 2 -- Get accepted self-answers
INNER JOIN users u ON u.Id = q.OwnerUserId -- get OP's user info
WHERE q.PostTypeId = 1 -- Only get questions

Я не уверен, где хранятся ваши comments & suggested edits,но я предполагаю, что вам нужно будет выполнить какую-то агрегацию типа group_concat() или JSON, чтобы вернуть эти данные, если вам нужна только одна строка на пост с вопросом.

...