使用SUM选择语句

时间:2012-08-24 15:09:37

标签: php sql

有关SUM的问题。

我有一张桌子

ID | JOBSITE | EMPLOYEE |  VENDOR  |  PRICE
---+---------+----------+----------+----------
1  |  Job1   |  CHris   | Vendor1  |  100.00
2  |  Job2   |  Matt    | Vendor1  |  100.00
3  |  Job3   |  Chris   | Vendor2  |  100.00

从Vendor1查询所有内容非常有效。我用

Select * From table WHERE vendor="vendor1" 

它显示两行,完美(实际上它更多但是这个例子将是两行) 我想使用SUM语句,但似乎当我这样做时,我得到的只是一行显示,但总SUM工作得很好。我尝试了几种不同的方法,但是我得到一个SQL错误,或者只是显示像这样的一行

ID, JOBESITE, EMPLOYEE, VENDOR, PRICE, TOTALPRICE
1,  Job1,     Chris,    Vendor1, 100.00, 200.00

总和有效,但不会显示与Vendor1相关的所有行。

知道如何做到这一点吗? 我试过了

Select *, SUM(price) From table Where vendor="vendor1" 

这基本上就是我想要的。我意识到代码不起作用,当我确实让它工作时,我只能得到正确总数的总价格列。或者我只有一个id行。添加Totalprice colum再次使用正确的值。但我想要的是将所有行连接到特定供应商,然后基本上在第1行Colum 6上。 Totalprice。所有价格加起来

1 个答案:

答案 0 :(得分:6)

您需要使用汇总和GROUP BY

SELECT t1.id, 
   t1.jobsite, 
   t1.employee, 
   t1.vendor,
   t2.TotalPrice
FROM yourTable t1
INNER JOIN 
(
   SELECT SUM(price) TotalPrice, vendor
   FROM yourTable
   GROUP BY vendor
) t2
   ON t1.vendor = t2.vendor
WHERE t1.vendor = 'vendor 1'

请参阅SQL Fiddle with Demo

要获得结果,您需要使用SUM()GROUP BY。由于您需要每个vendor的总计,因此您需要在该字段上使用GROUP BYGROUP BY组合了彼此相等的所有值。

您需要使用子查询来获取totalprice,因为如果您将SUM()应用于所有记录,则无法获得正确的结果,因为id,jobsite,employee是不同的每条记录。

在没有子查询的情况下,请SQL Fiddle with a Demo申请SUM()GROUP BY