我需要从我们的表中获取特定日期范围的销售总额,并显示按星期几分组的结果。 (制作图表)
以下是我到目前为止的内容
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-----|
答案 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_date
,total_price
,total_tax
和register_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)