2012-11-30 2 views
2

일부 쿼리를 함께 쓰는 데 어려움을 겪고 있습니다.MYSQL QUERY, SQL

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 개 부품 번호로 제한됩니다. 이 부품 번호는 양의 열이 얼마나 많은 부분을 보여줍니다 '수량'이 ​​있습니다

이 경우
part_num | qty 

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

그 부품 번호 1001를 보여줄 것입니다 내 첫 번째 문은 세 번 나타납니다을, 항목 번호 4 번 등을 나타납니다 . 제 문제는 항목 1001이 3 배로 3000이라는 합계를 보여주기 위해 내 진술과 함께 qty 열을 추가하고 싶습니다.

수행 방법에 대한 아이디어 이 ?

답변

3

이미 GROUP BY을 사용하고 있으므로 DISTINCT입니다.

합계를 표시하려면 SUM() 기능이있는 필드를 추가하기 만하면됩니다.

+0

굉장하다! 감사! 마침내 효과가있었습니다! – Dimitri

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 
+0

모든 부품에 대해 총 '수량'을 합산 할 수 있도록 항상 '수량'열이 없으므로 작동하지 않습니다. 부품 번호가 나타날 때마다 '수량'을 더할 수 있어야합니다. 위의 예제에서 항목 1001의 경우 합계를 표시하는 별도의 열이 필요합니다.이 경우 1000 + 1000 + 1000 = 3000이됩니다. – Dimitri

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']; 
} 
+0

그래, PHP는 항상 작동하지만 실제로는 사용하지 않으려합니다. 너무 많은 PHP는 내 문제를 해결할 수 있습니다. 나는 PHP로 해봤지만 너무 많은 클래스를 작성할 때 발견된다. – Dimitri