在不使用内部查询的情况下从两个不同的表和组计算计数和总和

声纳

我先有两张桌子 A 有 column id,phone_number,refer_amount

和第二个 B 有列 phone_number,transaction_amount

现在我想要使用按 phone_number 分组而不使用内部查询的两个表中sum()的 refer_amount 和 transaction_amount 以及count()phone_number

表A

电话号码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
蒂姆·比格莱森

我会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子句中加入逗号

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在不使用算术运算的情况下计算两个二进制字符串的总和需要多少次迭代?

在不使用嵌套的 if 和 for 循环的情况下计算矩阵?

使用 Postgres SQL 在不复制的情况下合并两个不同的表

在不使用VBA的情况下,由不同单元格中的行号和列号所指的总和

如何使用雄辩的 Laravel 获得两个表和组响应的总和?

在不使用软件包的情况下,如何计算python中两个日期之间的年,月,日数

在不使用python中的库的情况下,将两个不同大小的元素明智的列表相乘

在不使用任何BackColor属性的情况下,ToolTip的BackColor随两个不同的示例而变化

在不使用基于级联键的联接的情况下,在Power Pivot中合并来自两个单独表的数据

在不使用for循环的情况下,添加两个大小不等的numpy数组(长度为n和m)以生成* m数组

Shell脚本在不使用expr和第三个变量的情况下查找两个数字的乘积

是否有更简单的方法可以在不使用两个索引的情况下填充和查找空列表槽?

如何绘制两种不同情况下两个变量(米和高度)的分布?

如何在不使用索引的情况下连接不同列上的两个数据框

从两个具有相同列名和组tehm的不同表中进行计数(如果名称相同)

将同一表中的两个查询连接到不同的月份和总和值

使用glFrustum在不使用GLUT_STEREO的情况下渲染两个重叠的FOV

如何合并两个MongoDB聚合管道查询的结果,并在不使用$ facet的情况下对合并的结果执行另一个聚合查询?

如何在不使用服务和 rootscope 的情况下在两个控制器之间共享数据?

使用内部联接和两个前键查询表数据

使用 Laravel 从两个表中比较和计数

在不使用atom_concat的情况下连接两个序言原子

是否可以在不使用返回类型的情况下连接两个int数组?

如何在不使用嵌套的for循环的情况下迭代两个列表?

如何在不使用zip的情况下遍历两个列表?

如何在不使用临时变量的情况下交换两个变量的值?

如何在不使用循环目标c的情况下比较两个动态数组

如何在不使用for循环的情况下向量化这两个numpy操作?

如何在不使用for循环的情况下对两个列表的多个元素进行处理?