在SQL中聚合相关查询

时间:2014-12-03 20:32:05

标签: sql aggregate

我有一个与聚合函数相关的问题。

目前,我想基于2个表做一些平均值。第一个表是标准表,它包括每个方案的标准。第二个表是数据表,它包括需要用于平均值的所有记录。

以下是2个表格的结构。

表1:类别

CREATE TABLE Sales
(
SaleDate date,
SalerZip varchar(255),
ProductID integer,
AveragePrice integer
);

Create table details
(
ListSaleDate date,
SalerZip varchar(255),
buyerDistance integer,
price integer,
ProductID integer
);

注意,这是拍卖价格,因此,同一产品可以以不同的价格出售。

要求如下。对于表类别(A)中的每个记录,我们需要在表格详细信息(B)中搜索符合以下条件的一堆记录

  1. A.SaleDate - 30天< = B.date< A.SaleDate
  2. A.ProductID = B.ProductID
  3. A.SalerZip = B.SalerZip和B.buyerDistance< 200
  4. 因此,对于表A中的每条记录,我们可以从表B中找到一组记录,表B中这组记录的平均价格将保存到表A列AveragePrice中。

1 个答案:

答案 0 :(得分:0)

您不应将结果存储在Sales表中的字段中,否则每次细节更改时都需要重新计算结果。您应该为此创建一个视图:

CREATE VIEW SalesView
AS
SELECT 
    SaleDate date,
    SalerZip varchar(255),
    A.ProductID,
    AVG(B.Price) AveragePrice
FROM Sales A
INNER JOIN Details B
ON DATEDIFF(Day,A.SaleDate, -30) <= B.ListSaleDate
    AND B.ListSaleDate < A.SaleDate
    AND A.ProductID = B.ProductID
    AND A.SalerZip = B.SalerZip and B.buyerDistance < 200
GROUP BY A.SaleDate,
    A.SalerZip,
    A.ProductID