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

这基本上提取了最常见的零件编号,并显示了它在“总”变量中出现的次数。在这种情况下,我还限制了前 10 个零件号。这些零件编号还有一个数量列“数量”,显示有多少零件:

part_num | qty 

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

在这种情况下,我的第一个语句将显示零件编号 1001 将出现 3 次,项目编号 4 将出现一次,依此类推。我的问题是我想将 qty 列与我的语句相加,以表明项目 1001 出现 3 次,“数量”总和为 3000。

关于如何做到这一点的任何想法?

4

3 回答 3

3

You don't need to use DISTINCT as you are already using a GROUP BY.

To show the sum you simply need to add the field with the SUM() function.

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 回答
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 回答
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 回答