选择使用 SUM 的语句


SELECT STATEMENT USING SUM

关于 SUM 的问题。

我有一张桌子

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

仅从供应商 1 查询所有内容效果很好。我使用

Select * From table WHERE vendor="vendor1" 

完美地显示两行(实际上它更多,但此示例将是两行(我想使用 SUM 语句,但似乎当我这样做时,我得到的只是显示一行,但总 SUM 效果很好。我已经尝试了几种不同的方法,但我要么收到SQL错误,要么只是像这样显示一行

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

总和有效,但它不会显示与供应商 1 相关的所有行。

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

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

这基本上就是我想要的。我意识到代码不起作用,当我让它工作时,我只是得到具有正确总数的总价格列。或者我只有一个 id 行。加上总价列,再次获得正确的值。但我想要的只是将所有行附加到特定供应商,然后基本上在第 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 小提琴

要获得结果,您需要使用 SUM()GROUP BY . 由于您想要每个vendor的总数,那么这就是为什么您需要在该字段上进行GROUP BY的原因。GROUP BY组合了彼此相等的所有值。

您需要使用子查询来获取totalprice因为如果对所有记录应用SUM(),则不会获得正确的结果,因为每个记录的 id、作业站点、员工都不同。

请参阅带有应用SUM()GROUP BY的 SQL 小提琴演示,而无需子查询。