【问题标题】:MySQL - Join by only append a row of aggregated values from source table to each of selected rows on host tableMySQL - 通过仅将源表中的一行聚合值附加到主机表上的每个选定行来加入
【发布时间】:2020-06-03 02:58:54
【问题描述】:

我有一种情况,我可以用下面的简单方式描述一下。

表 A 具有字段 X、Y 和 Z。

表 B 是包含字段 P 和 Q 的参考表。

Y 以 P 作为外部参考。

X-Y 未设置为唯一,因为配对值是可重复的。

X-Y-Z 通常是不同的,但 Z 只是类型中的文本,因此不会被索引。

在来自表 A 的 select 查询中,我只想根据 Y 的值附加到每一行,即 Q 的所有值的 sum。但是当我执行以下操作时,它只显示一个每个不同 XY 值的单行。

select X, Z, sum(Q) from A where ___ join B on Y = P group by X, Y

在考虑添加 ID 字段作为最后一个选项之前,我可以尝试其他方法吗?

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    如果您在派生表中从B 执行聚合,则可以将JOIN 聚合到表A 以获取A 每一行的SUM:

    SELECT A.*, B.Q
    FROM A
    JOIN (SELECT P, SUM(Q) AS Q
          FROM B
          GROUP BY P) B ON B.P = A.Y
    

    【讨论】:

    • 谢谢。绝对解决我的问题。只是问问而已。这样做在性能上有什么缺点吗?
    • @jerinho 不用担心。这应该是生成此结果的最有效方式。
    猜你喜欢
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2020-06-01
    相关资源
    最近更新 更多