获取第1列ON DISTINCT第2列的SUM

时间:2013-05-28 02:07:23

标签: mysql

我需要从我们的表中获取特定日期范围的销售总额,并显示按星期几分组的结果。 (制作图表)

以下是我到目前为止的内容

SELECT  DAYNAME(sale_date), SUM(total_price + total_tax)
        FROM threewor_vend.vendsales AS s
        WHERE s.register_id = '07709f8e-8d90-11e0-8e09-4040f540b50a'
        AND sale_date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
        GROUP BY  DAYOFWEEK(sale_date)

这会返回每天的日期和总销售额,这很棒。

事情是,如果每次销售中有多个商品,则每次销售会有多行。所以总价格重复了很多次。所以我不能只得到total_price的总和。

我需要获得total_price的总和,仅适用于每个UNIQUE sale_id。

例如

sale id | item | itemqty | item value | item total | total_price |
---1----|-drum-|-1-------|-60.00------|-60.0-------|-$230.00-----|
---1----|-uke--|-1-------|-170.00-----|-170.0------|-$230.00-----|  

2 个答案:

答案 0 :(得分:1)

在MySQL中,您可以按sale_id进行分组。这将消除重复:

    SELECT  DAYNAME(sale_date), SUM(total_price + total_tax)
    FROM (select s.*
          from threewor_vend.vendsales s
          group by sale_id
         ) s
    WHERE s.register_id = '07709f8e-8d90-11e0-8e09-4040f540b50a'
    AND sale_date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
    GROUP BY  DAYOFWEEK(sale_date);

只要其他列 - sale_datetotal_pricetotal_taxregister_id - 在给定{{1}的所有行中相同那么这将有效。

答案 1 :(得分:1)

由于您每次销售多次存储total_price,因此您的结果会成倍增加。

这是使用带有DISTINCT的子查询的一个选项,假设每个重复销售的四个字段都相同:

SELECT DAYNAME(sale_date), SUM(total_price + total_tax)
FROM (
    SELECT DISTINCT sale_date, total_price, total_tax, register_id
    FROM threewor_vend.vendsales 
    WHERE s.register_id = '07709f8e-8d90-11e0-8e09-4040f540b50a'
        AND sale_date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
) t
GROUP BY DAYOFWEEK(sale_date)