0

テーブルから特定の日付範囲の売上合計を取得し、結果を曜日別にグループ化して表示する必要があります。(チャートを作る)

以下は私がこれまでに持っているものです

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 の合計を取得することはできません。

UNIQUE sale_id ごとにのみ、total_price の合計を取得する必要があります。

例えば

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-----|  
4

2 に答える 2

1

販売ごとに total_price を複数回保存しているため、結果が乗算されています。

DISTINCT複製された販売ごとに 4 つのフィールドがすべて同じであると仮定して、サブクエリを使用する 1 つのオプションを次に示します。

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)
于 2013-05-28T02:16:22.003 に答える
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-- が特定の のすべての行で同じである限り、sale_idこれは機能します。

于 2013-05-28T02:11:20.943 に答える