将Excel Forumla转换为MySQL查询
我在这里有一个问题的答案:
=SUMPRODUCT(($A$1:$A$10=A1)*($B$1:$B$10=B1))
和
=COUNTIFS(G:G,G2,H:H,H2)
但是完成工作却非常缓慢。 我相信我需要用SQL来做这个,而不是十万行。
我想知道的是如何在SQL中完成相同的编号?
我想我可以把我独特的供应商放在一个表中,然后将我的产品插入到一个表中,同时从vendors
表中提取我的vendorsID
。
在这一点上,我将有两个表…在vendors
表中,我可以为每个供应商的产品数量(如上面的链接中所述)添加另一列,以及具有产品名称和vendorID的产品表格。
问题是这个查询怎么看? 查询一个表填充产品和供应商ID另一个表认为我明白,但实际上使我需要的计算(每个供应商匹配的产品数量)我完全失去了。
有什么build议么?
假设你已经填充了这两个表:
供应商:
-
Id
,Name
。
产品介绍:
-
Id
,VendorId
,Name
…
那么,为了:
统计供应商有多less个产品名称是相同的。
你应该这样做:
SELECT v.Id, v.Name, COUNT(p.Id) AS 'Total Products' FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId GROUP BY v.Id, v.Name
编辑:如果你想从这个查询中得到这个结果集到另一个表中,你应该使用INSERT ... SELECT
语法 ,就像:
INSERT INTO NewTable(VendorId, VendorName, ProductsCount) SELECT v.Id, v.Name, COUNT(p.Id) AS 'Total Products' FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId GROUP BY v.Id, v.Name
编辑2:要更新已有供应商列表的现有表,应该通过将其与结果集连接来更新表
UPDATE ExistingTable t INNER JOIN ( SELECT v.Id, v.Name, COUNT(p.Id) AS 'TotalProducts' FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId GROUP BY v.Id, v.Name ) v ON t.VendorId = v.Id SET t.VendorId = v.Id, t.VendorName = v.Name, t.ProductsCount = v.TotalProducts
假设表格结构在Excel中即一个表格: http ://sqlfiddle.com/#!2/fb9f3/1
SQL将如下所示:
SELECT vendor, product, SUM(qty) from tblOrder GROUP BY vendor, product