0

これはかなり複雑な質問なので、分割します。

チャレンジ

次の構造のテーブルがあります。

  • ID (INT、UNIQUE)
  • 会社 (INT) -> 会社を含む別のテーブルへのリンク
  • コストタイプ (INT)
  • 値 (INT)

各会社のすべてのコストタイプの値の差を計算して、会社を比較する必要があります。1 つの企業が参照として使用されます。他の会社は、参照会社のすべてのコストタイプの値をできるだけ一致させる必要があります。結果は、参照企業にどれだけ一致するかによって並べ替える必要があります。

事実

  • すべての企業が同じコストタイプを持っていると仮定できます
  • 費用の種類は事前にわかりません。予告なしに変更される可能性があります
  • 2 つの会社のコストタイプ値の差は、次のように計算する必要があります: ABS([参照会社のコストタイプ値] - [他社のコストタイプ値]) ^ 2

仮説

このデータを比較する唯一の方法は次のとおりです。

  • すべての異なるコストタイプを取得する
  • 参照会社のこれらのコストタイプの値を取得します
  • どういうわけか、各会社のすべてのコストタイプをグループ化し、信じられないほど長い (自動生成された) クエリを使用して、すべてのコストタイプの値を参照会社の値と比較します。

質問

  • これは可能ですか?1 つの会社のすべての行を JOIN せずに一度に複数の行を比較する方法がわかりません。これは巨大なクエリになり、永遠に時間がかかります。
  • これを行うより効率的な方法はありますか?おそらく、私が知らないこれらのタイプの問題に対する標準的な解決策はありますか? (そしてGoogleで見つけられない)
  • MySQL (私が現在使用している) よりも効率的にこの種の問題を処理できる別のデータベース システム (SQL、NoSQL、私はすべてにオープンです) はありますか?

質問全体を読んでくれてありがとう。長いことは承知していますが、説明するのは非常に難しいです。私はこの課題に何日も苦労してきましたが、物事を把握することができないようです. 前もって感謝します!

4

1 に答える 1

0

次の列を持つ参照テーブルを作成します

id (autogen), compare_from_company_id, compare_to_company_id, value

フィールドの説明。

  1. id - autogen フィールド
  2. あなたの方程式で会社を参照してください
  3. あなたの方程式の他の会社
  4. ABSの値([参考会社コストタイプ値] - [他社コストタイプ値]) ^ 2

次に、メイン テーブルのプライマリ レコードが変更されたときに、このテーブルにイベントを入力します。その後、この新しいテーブルを他のクエリで簡単に参照できます。

于 2013-06-13T08:54:22.150 に答える