-1

关于 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 列。但我想要的只是获取所有附加到特定供应商的行,然后基本上在第 1 行第 6 列。总价。所有的价格加起来

4

1 回答 1

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

要获得结果,您需要使用 aSUM()和 a GROUP BY。既然您想要每个 的总数vendor,那么这就是您需要GROUP BY在该字段上的原因。AGROUP BY组合了所有彼此相等的值。

您需要使用子查询来获取,totalprice因为如果您将 aSUM()应用于所有记录,则不会得到正确的结果,因为每个记录的 id、jobsite、employee 都不同。

请参阅SQL Fiddle以及应用和不带子查询的演示。SUM()GROUP BY

于 2012-08-24T15:14:00.577 回答