рассчитать количество и сумму из двух разных таблиц с группой без использования внутреннего запроса - PullRequest
0 голосов
/ 29 октября 2018

У меня две таблицы А, имеющие column id,phone_number,refer_amount

и второй B, имеющий столбец phone_number,transaction_amount

теперь я хочу sum() refer_amount и Transactions_amount и count() phone_number из обеих таблиц, используя группу по phone_number без использования внутреннего запроса

Таблица A

phone_number    refer_amount
123             50
456             80
789             90
123             90
123             80
123             20
456             20
456             79
456             49
123             49

Таблица B

phone_number     transaction_amount
123              50
123              51
123              79
456              22
456              11
456              78
456              66
456              88
456              88
456              66
789              66
789              23
789              78
789              46

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

SELECT a.phone_number,COUNT(a.phone_number) AS refer_count,SUM(a.refer_amount) AS refer_amount,b.phone_number,COUNT(b.phone_number) AS toal_count,SUM(b.transaction_amount) AS transaction_amount FROM dbo.A AS a,dbo.B AS b WHERE a.phone_number=b.phone_number GROUP BY a.phone_number,b.phone_number

вывод (неправильный):

phone_number  refer_count  refer_amount  phone_number  transaction_count  transaction_amount
123           15           867           123           15                 900
456           28           1596          456           28                 1676
789           5            450           789           5                  291

вывод (что я хочу):

phone_number  refer_count  refer_amount  phone_number  transaction_count  transaction_amount
123           5            289           123           3                  180
456           4            228           456           7                  419
789           1            90            789           5                  291

Ответы [ 2 ]

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

Я бы сделал агрегации для таблицы B в отдельном подзапросе, а затем присоединился бы к ней:

SELECT
    a.phone_number,
    COUNT(a.phone_number) AS a_cnt,
    SUM(a.refer_amount)   AS a_sum,
    COALESCE(b.b_cnt, 0)  AS b_cnt,
    COALESCE(b.b_sum, 0)  AS b_sum
FROM A a
LEFT JOIN
(
    SELECT
        phone_number,
        COUNT(*) AS b_cnt,
        SUM(transaction_amount) AS b_sum
    FROM B
    GROUP BY phone_number
) b
    ON a.phone_number = b.phone_number;

Одна из основных потенциальных проблем с вашим текущим подходом заключается в том, что объединение может привести к дублированиюсчитая, что данная phone_number запись в таблице A реплицируется из-за объединения.

Говоря о соединениях, обратите внимание, что выше я использую явное соединение, а не неявное, которое вы использовали.В общем случае не следует ставить запятые в предложении FROM.

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

Это может помочь.Вам не нужна сумма (b.phone_number) при проверке a.phone_number = b.phone_number.Для телефонного номера необходимо четко различить два столбца.

Для групп по, все, что не в статистической функции, должно быть в группе по функции.

select a.phone_number, count(distinct a.phone_number), sum(a.refer_amount),
  sum (b.transaction_amount) 
  from A as a, B as b 
where a.phone_number=b.phone_number 
group by a.phone_number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...