1

長年の読者、初めてのポスター。ある値(列'product_group'にあります)が繰り返される時間のカウントを収集する必要があるテーブルが1つあり、別の列('product_type')の値も考慮する必要があります。

私は長い間フォーラムを検索してきましたが、これが今のところ思いついたものです...私の問題は、これが最も効率的な方法ではないと感じていることです。また、条件付きの一致するものがない場合(たとえば、else条件)はカウントできません。

SELECT
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product1%', 1, 0)) AS Value1,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product2%', 1, 0)) AS Value2,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product3%', 1, 0)) AS Value3,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product4%', 1, 0)) AS Value4,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product5%', 1, 0)) AS Value5,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product6%', 1, 0)) AS Value6,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product7%', 1, 0)) AS Value7,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product8%', 1, 0)) AS Value8,
   SUM(product_group NOT LIKE '%Product9%') AS Value9,  
   SUM(IF(record_type LIKE '%TypeA%', 1, 0)) AS Value10
FROM
   [tables]
WHERE
   [conditions]

それに関する私の目的は、加重ユーザーの生産性を見つけることです。したがって、ユーザーが特定の製品を処理するたびに計算します。製品の種類に応じて、複雑さを考慮して値を変更します(元の値の0.83から1.25に)。さまざまな製品の重量がすべて「クランチ」されたら、それらをすべて追加してから、作業時間で割ります。

計算は、私のPHPコードのSQLクエリの外部で行われます。以前の方法ではなく、WHEREセクションの条件を使用して複数の順次SQLクエリを実行する方がよいのではないかと考えていました。このような場合は次のようになります...

SELECT 
   COUNT(*)*0.95 as `Value1`
FROM
   [tables]
WHERE
   record_type NOT LIKE '%TypeA%'
   AND  product_group LIKE '%Product1%'
   [other conditions]

そして、他のすべての10かそこらの値に対して繰り返します...

だから、それはほとんどそれを要約します。私が考えることができるすべてのリソースをかなり使い果たしたので、あなたが私と共有することができるどんな提案、ヒント、リンクも大いに感謝されるでしょう。

よろしく

4

1 に答える 1

0

あなたの方法がより良い方法です。個別のSQLクエリを実行すると、テーブルが複数回スキャンされることになります。一度だけテーブルを通過する方がはるかに良いです。

また、SQLで追加の演算を実行することもできます。ただし、すでにアプリケーションコードに記述している場合は、それを変更する必要はありません。

于 2013-03-23T00:08:20.323 に答える