添加两个SUM DISTINCT值,MySQL

时间:2014-05-26 15:09:00

标签: mysql sql

我使用以下查询收集MySQL表中某些特定数据的SUM信息:

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

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

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

由于

1 个答案:

答案 0 :(得分: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是金额,则此公式会累计所有不同的订单金额。因此,如果您有一百万个订单,但它们都恰好具有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)