MySQL: СУММА двух СЧЕТОВ (по значению) - PullRequest
0 голосов
/ 30 декабря 2018

Моя MySQL-таблица сохраняет цитаты.Каждая строка представляет собой одну цитату, как в:

A = citer, B = cited (т. Е. Цитируется B).

Я знаю, как получить числа в (1)кто цитировал А чаще всего, и на (2) кого цитировал А чаще всего:

/* (1) who cited A most often? */
SELECT citer,COUNT(citer) AS citations1 FROM `table` WHERE cited='A' GROUP BY citer ORDER BY citations1 DESC

/* (2) whom did A cite most often? */
SELECT cited,COUNT(cited) AS citations2 FROM `table` WHERE citer='A' GROUP BY cited ORDER BY citations2 DESC

Теперь я хочу получить сумму этих двух статистических данных (citations1 + citations2) такчто я знаю, у кого больше всего ссылок на цитирование с A.

Пример: если B цитировал A пять (5) раз, а A цитировал B три (3) раза, то сумма AB-связи равнавосемь (8).

Возможно ли это с помощью MySQL-формулы?Спасибо за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Можно join Результаты:

select t1.citer as person, t1.citations1 + t2.citations2 as result
from
(
SELECT citer,COUNT(citer) AS citations1 FROM `table` WHERE cited='A' GROUP BY citer ORDER BY citations1 DESC
) t
join
(
SELECT cited,COUNT(cited) AS citations2 FROM `table` WHERE citer='A' GROUP BY cited ORDER BY citations2 DESC
) t2
on t1.citer = t2.cited
0 голосов
/ 30 декабря 2018

Я использовал UNION в подзапросе, а затем сумму строк

SELECT other, SUM(citations)
FROM (
   SELECT citer other,COUNT(*) AS citations 
   FROM citations 
   WHERE cited='A'        
   GROUP BY citer 
   UNION
   SELECT cited, COUNT(*)
   FROM citations 
   WHERE citer='A' 
   GROUP BY cited) AS uni
GROUP BY other
0 голосов
/ 30 декабря 2018

Вы можете написать это как:

select person, (sum(citers) + sum(citeds)) as total
from ((select citer as person, count(*) as citers, 0 as citeds
       from citations
       where cited = 'A'
       group by citer
      ) union all
      (select cited, 0, count(*) as citeds
       from citations
       where citer = 'A'
       group by cited
      )
     ) c
group by person
order by total desc;

Этот вопрос немного сложен.Если вы попытаетесь использовать join, вы исключите возможность того, что человек с наибольшим количеством ссылок цитирования является только "цитирующим" или только "цитируемым".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...