Команда SQL для подсчета результатов по нескольким столбцам? - PullRequest
0 голосов
/ 07 октября 2018

Рассмотрим следующую таблицу SQL под названием «звонки», которая представляет собой полный список звонков из телефонного счета Джона:

Sample Data Set for a Call log:
from, to, length (min)
John, Jill, 15
John, Jill, 7
Jill, John, 4
John, Jill, 6
John, Jill, 9

Я выяснил, что следующий запрос:

SELECT calls.from, calls.to, COUNT(1) AS call_count
FROM `mydb.calls` AS calls
WHERE calls.from = "John" OR calls.to = "John"
GROUP BY calls.from, calls.to
ORDER by call_count DESC

Дает мне следующий результат:

row, from, to, call_count
1, John, Jill, 4
2, Jill, John, 1

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

row, who, inbound, outbound, total
1, Jill, 1, 4, 5

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать условную логику для ключа группировки:

SELECT (CASE WHEN c.from = 'John' THEN c.to ELSE c.from END) as who, 
       COUNT(*) AS call_count
FROM `mydb.calls` c
WHERE 'John' in (c.from, c.to)
GROUP BY who
ORDER by call_count DESC;

SELECT (CASE WHEN c.from = 'John' THEN c.to ELSE c.from END) as who, 
       COUNT(*) AS call_count,
       SUM(c.from = 'John') as inbound,
       SUM(c.to = 'John') as outbound
FROM `mydb.calls` c
WHERE 'John' in (c.from, c.to)
GROUP BY who
ORDER by call_count DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...