2

いくつかのクエリをまとめるのに苦労しています。

SELECT `part_num`, COUNT(`part_num`) AS `total` 
    FROM `job_sheet` 
    WHERE `qty`!=0 AND `completion`=1 
    GROUP BY `part_num` 
    ORDER BY `total` DESC 
    LIMIT 10

これは基本的に最も一般的な部品番号を取得し、それが「total」変数に表示される回数を示します。この場合、私も上位10個の部品番号に限定しました。これらの部品番号には、部品の数を示す数量列「qty」もあります。

part_num | qty 

1001     | 1000
1004     | 200 
1003     | 360 
1001     | 1000
1001     | 1000

この場合、私の最初のステートメントは、部品番号1001が3回表示され、アイテム番号4が1回表示されるなどを示します。私の問題は、それを示すために、ステートメントと一緒に数量列を合計したいということです。アイテム1001は、「数量」の合計が3000で3回表示されます。

これを行う方法についてのアイデアはありますか?

4

3 に答える 3

3

DISTINCTを使用する

SELECT DISTINCT part_num, COUNT(part_num) AS total 
FROM job_sheet WHERE qty!=0 AND completion=1 
GROUP BY part_num 
ORDER BY total DESC 
LIMIT 10
于 2012-11-30T02:59:00.393 に答える
3

DISTINCTすでに使用しているので、使用する必要はありませんGROUP BY

合計を表示するには、関数を使用してフィールドを追加するだけですSUM()

SELECT part_num, COUNT(part_num) AS total, SUM(qty) as total_qty 
    FROM job_sheet 
    WHERE qty!=0 AND completion=1 
    GROUP BY part_num 
    ORDER BY total DESC 
    LIMIT 10;
于 2012-11-30T03:39:48.043 に答える
0

@JohnCondeの答えはより効率的(+1)ですが、PHPでそれを実行したい場合に備えて:

$totals= array();

foreach ($data as $v) {
    isset($totals[$v['part_num']])) ?
        $totals[$v['part_num']] += $v['qty'] :
        $totals[$v['part_num']] = $v['qty'];   
}
于 2012-11-30T03:00:06.460 に答える