GroupBy计算两个表

时间:2013-12-16 09:08:50

标签: sql oracle join

请忽略它是否是一个非常基本的问题,因为我不擅长SQL并且必须开发查询我google并且无法获得我想要的结果。

我有两张桌子

产品

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 

以上查询返回productid with count但我想要productname with count以便我如何将sales表与产品联系起来?

此致

3 个答案:

答案 0 :(得分:1)

只需加入Product表:

SELECT   productname, COUNT(*) 
FROM     Sales 
JOIN     Product ON Sales.productid = Product.producyid
WHERE    saledate = TRUNC(SYSDATE - 1)
GROUP BY ProductName

答案 1 :(得分:1)

试试这个:

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;

答案 2 :(得分:1)

这是一个与现有答案略有不同的答案;

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通常是一个很好的列,可以作为此类索引的开头,并且(取决于优化程序实际上有多聪明),因为它不是{{1}的一部分},对优化器没用。