【问题标题】:Adding two SUM DISTINCT values, MySQL添加两个 SUM DISTINCT 值,MySQL
【发布时间】:2014-05-26 15:09:00
【问题描述】:

我正在使用以下查询来收集和汇总有关我的 MySQL 表中某些特定数据的信息:

SELECT rowid,
    id_name,
    SUM(DISTINCT colA) AS colAtotal,
    SUM(DISTINCT colB) AS colBtotal
FROM orders

我知道我可以在查询后将 colAtotal 和 colBtotal 与 PHP 一起添加,但我需要在查询中通过排序来构建“总计”列。

如何在查询中一起添加 '(SUM(DISTINCT colA) as colAtotal, SUM(DISTINCT colB) as colBtotal)' 以便我的排序有另一列?

谢谢

【问题讨论】:

  • 为什么不把它们加在一起呢? SUM(DISTINCT colA) + SUM(DISTINCT colB) -- 另外,您是否打算GROUP BY 任何字段?
  • 不,不是为了分组——这就是我使用 DISTINCT 的目的。我试过将它们加在一起,但我无法确定括号的顺序。
  • 在这种情况下,distinctgroup by 不同。但是,如果它返回您想要的结果,那么只需添加 2 列即可。示例:sqlfiddle.com/#!2/faa23/2

标签: mysql sql


【解决方案1】:

只需将它们相加即可。

SELECT 
    SUM(DISTINCT colA) AS colAtotal,
    SUM(DISTINCT colB) AS colBtotal,
    SUM(DISTINCT colA) + SUM(DISTINCT colB) AS colAplusBtotal
FROM orders

如果不需要,可以删除单独的总和

SELECT 
    SUM(DISTINCT colA) + SUM(DISTINCT colB) AS colAplusBtotal
FROM orders

或者如果你想按它排序:

只需将它们相加即可。

SELECT 
    SUM(DISTINCT colA) AS colAtotal,
    SUM(DISTINCT colB) AS colBtotal
FROM orders
ORDER BY  
    SUM(DISTINCT colA) + SUM(DISTINCT colB)

注意,在 ORDER BY 中添加时没有列别名。由于没有返回该字段,因此给它一个别名是没有意义的。

我已删除其他(非聚合)字段,因为您没有按它们分组。保留它们可能会让您感到困惑,因为它们基本上是随机值。

但请注意,DISTINCT 可能无法达到您的预期。此公式将所有不同的订单金额相加,前提是 colA 和 colB 是金额。因此,如果您有 100 万个订单,但它们的值恰好都是 10 或 17,那么 sum 的结果将是 27,因为只有唯一值相加。

当然,我不能看你的脑袋,但我希望你寻求这样的东西,以获得每个客户的总金额或其他东西:

SELECT 
    Customer,
    SUM(colA) AS colAtotal,
    SUM(colB) AS colBtotal
FROM orders
GROUP BY Customer
ORDER BY 
    SUM(colA) + SUM(colB)

【讨论】:

  • 感谢您的输入;我按 ID 分组,但我将使用新列以及 ORDER BY 中两个 DISTINCT 列的总和。我是否正确地理解了 ORDER BY 删除了将两者相加而形成的唯一列?使问题复杂化的是 ORDER BY 由 PHP 开关控制。
  • 不,不。您可以按相同的表达式排序。所以你可以选择它,就像在第一个 snippen 中一样,并按它排序,就像在第三个 sn-p 中一样。没有理由不能两者兼得。总和 6 次似乎没用(2 个单独的,2 个作为字段相加,2 个按顺序相加),但查询优化器可能会考虑到这一点,并且只计算每个字段的实际总和一次。
  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2021-02-01
相关资源
最近更新 更多