Sql 两个表上有计数的GroupBy
如果这是一个非常基本的问题,请忽略它,因为我不擅长SQL,必须在google上开发查询,并且无法得到我想要的结果 我有两张桌子 产品Sql 两个表上有计数的GroupBy,sql,oracle,join,Sql,Oracle,Join,如果这是一个非常基本的问题,请忽略它,因为我不擅长SQL,必须在google上开发查询,并且无法得到我想要的结果 我有两张桌子 产品 ProductID, ProductName, Descritpion 2010 A xyz 2011 B uyt 2012 C jkj 销售情况如下 Sales SalesID, ProductID, SaleDate, Stat
ProductID, ProductName, Descritpion
2010 A xyz
2011 B uyt
2012 C jkj
销售情况如下
Sales
SalesID, ProductID, SaleDate, Status
1 2010 10-Dec-2013 K
2 2010 10-Dec-2013 u
3 2011 11-Dec-2013 i
我必须开发一个查询,它将返回每天的销售计数,如下所示
ProductName, TotalSaleCount, SaleDate
A 2 10-Dec-2013
我提出以下问题
SELECT productid,
Count(1)
FROM sales
WHERE saledate = Trunc(sysdate - 1)
GROUP BY productid
上面的查询返回带有count的productid,但我想要带有count的productname,那么我将如何将sales表与product连接起来
关于只需加入
产品
表:
SELECT productname, COUNT(*)
FROM Sales
JOIN Product ON Sales.productid = Product.producyid
WHERE saledate = TRUNC(SYSDATE - 1)
GROUP BY ProductName
试试这个:
select t1.PRODUCTNAME,count(t1.PRODUCTNAME) as TotalSaleCount,t2.SALEDATE from Product t1 , Sales t2
where t1.ProductID = t2.ProductID AND saledate = TRUNC(SYSDATE - 1)
GROUP BY t2.SALEDATE,t1.PRODUCTNAME;
这里有一个与现有答案稍有不同的答案
SELECT Product.ProductName, TotalSales.TotalSaleCount, TotalSales.SaleDate
FROM Product
JOIN (SELECT ProductId, SaleDate, COUNT(*) as TotalSaleCount
FROM Sales
GROUP BY ProductId, SaleDate) TotalSales
ON TotalSales.ProductId = Product.id
结果应与一些现有答案相同。然而,此版本可能(但不保证)更快-所选列更有可能具有索引,并且也是索引的更好选择
ProductName
通常不适合作为此类索引的开头,而且(取决于优化器的实际智能程度),因为它不属于Sales
,对优化器的用处较小。在我提到Sales.productid或product.product.id的分组中?当它抛出以下错误ORA-00918时:列定义不明确00918。00000—“定义模糊的列”分组依据列表应与选择列表相对应。它应该是“groupbyProductName”
。我修正了我的答案,谢谢你指出了这个问题。我试过了,但结果没有多大改善,我用(ProductId)替换TotalSales.ProductId=ProductId的下面一行,我希望在连接中是Product\u dot\u Id
,否则它将是交叉连接,这不是你想要的<代码>使用(…)实际上只是常规连接的语法糖,没有理由认为它应该是一种改进。我认为,它也是特定于MySQL的,应该避免使用标准的ON
条件。