0

効率を計算するのがわからないので、ここで質問します。誰かが私に何が良いかを教えてくれて、それを少し説明してくれることを願っています。

シナリオ:
現在、各ワーカーの本番の行を挿入するテーブルがあります。
次のようなもの:(Worker1)日付に対して(いくらかの量)で(product10)を生成しました。
そして、それは彼がその日を通して働いていた各駅にも当てはまります。

質問:
労働者が各日付で生産した金額の合計のレポートを生成する必要があります。どちらの方法でもレポートを生成する方法は知っていますが、問題はそれがどのように効率的かということです。

各日付の生産を合計する各人のクエリを実行する必要がありますか?または、合計金額、workerID、日付を挿入するテーブルがありますか?

繰り返しになりますが、もう少し詳しく説明していただければ、少なくとも知識に基づいた回答がこの問題の解決に大いに役立つとしたら、それは素晴らしいことです。

例:
これは、現在、本番テーブルにあるものです。

IDEmpIDProductID金額生産日
-------------------------------------------------- --------
1 1 11002013年1月14日  
2 1 2202012年1月14日

これは私が最終的に欲しいものです:

EmpID金額生産日
-----------------------------------
11202013年1月14日

このために別のテーブルを開始する必要がありますか?または、生産テーブルにあるものを合計して、必要なものを取得する必要がありますか?
生産テーブルは毎日ますます大きくなることを覚えておいてください(もちろん)。

4

2 に答える 2

1

私が何かを逃していない限り、あなたはこれが欲しいだけのように聞こえます:

select empid,
  sum(amount) TotalAmount,
  Dateofproduction
from yourtable
group by empid, Dateofproduction

SQL FiddlewithDemoを参照してください

結果:

| EMPID | TOTALAMOUNT | DATEOFPRODUCTION |
------------------------------------------
|     1 |         120 |       2013-01-14 |

注:あなたが提供したデータの2行目はそうでは2013ないと思われます2012

于 2013-01-14T14:51:29.427 に答える
1

i)直接:

select EmpId, sum(Amount) as Amount, DateOfProduction 
from ProductionTable
group by EmpId, DateOfProduction.

ii)これで、テーブルのサイズは大きくなり続けます。そして、あなたは日ごとのレポートだけを必要とします。

このテーブルは他の誰かによって使用されていますか?一部のデータをアーカイブできますか?一部のデータをアーカイブできる場合は、毎日レポートを作成した後、このテーブルのすべてのデータをセカンダリアーカイブテーブルにバックアップすることをお勧めします。したがって、毎日、today's価値のあるレコードのみをクエリする必要があります。

次に、にを追加することを検討できindexますDateOfProduction。これで、クエリを日付範囲に制限できるようになります。たとえば、select EmpId, sum(Amount) as Amount, DateOfProduction from ProductionTable group by EmpId, DateOfProduction where DateOfProduction = Date(now()).(または同様のもの)

これは単一のテーブルであり、複雑なクエリがないため、MySqlは数百万のレコードを簡単に処理できます。クエリでEXPLAINを試して、アクセスされているレコードの数と使用されているインデックスを確認してください。

于 2013-01-14T14:54:58.320 に答える