我试图在特定的时间段内获得销售的产品数量。对于此示例:products表具有数量字段,该字段在销售某个产品时递增。订单表具有开始日期和结束日期。有没有办法可以在我的订单表中保存产品表(如对象)的参考,这样我就能看到每个产品每个开始 - 结束日期的销售数量?一个简单的例子:我有2个产品:
1 bike 25000 3
和2 sportbike 30000 5
已售出约会。因此,订单类似于:1 05.07.2015 05.07.2015
和那些产品。
CREATE TABLE products (
product_no integer PRIMARY KEY,
name varchar(20),
price float,
quantity integer,
);
CREATE TABLE sells (
sell_id integer PRIMARY KEY,
start_date date,
end_date date
);
//新想法:
CREATE TABLE products (
product_no integer PRIMARY KEY,
name varchar(20),
price float
);
CREATE TABLE sells (
sell_id integer PRIMARY KEY,
date date,
quantity integer,
product_id integer FOREIGN KEY
);
答案 0 :(得分:0)
除非订单总是针对单个产品,否则我认为您需要第三张表。对我来说,这种情况的最小*)数据模型如下所示:
CREATE TABLE products (
product_no integer PRIMARY KEY,
name varchar(20) not null,
price float,
quantity_on_stock integer not null
);
CREATE TABLE orders (
order_id integer PRIMARY KEY,
order_date date not null
);
CREATE TABLE orderlines (
order_id integer not null REFERENCES orders.order_id,
product_no integer REFERENCES products.product_no,
price integer,
quantity integer not null,
PRIMARY KEY(order_id, product_no)
);
然后,在特定时期内获得销售的查询可能如下所示:
select
p.product_no,
p.name,
sum(ol.quantity)
from
products p
inner join orderlines ol on ol.product_no = p.product_no
inner join orderlines o on o.order_id = ol.order_id
where
ol.order_date between :start_date and :end_date
*)我说最小,但它实际上不到最小。您可能也想存储发票,或者至少是某种指示,表明订单是否实际支付和交付,因为有时订单被取消,或者只是等待开放。
答案 1 :(得分:0)
您肯定希望sales
表显示已售出的内容和时间,而不是显示正在运行的广告资源的表格。
在SQL中, 更容易聚合细节来创建运行总计,而不是从运行总计重建细节。
因此,如果您碰巧有一个sales
表,其中包含product_id
,quantity
和ts
(销售时间戳)的列,然后您可以按product_id
和销售日期获得销售摘要。
SELECT product_id,
DATE(ts) AS salesdate,
SUM(quantity) AS quantity
FROM sales
WHERE ts >= :start_date
AND ts < :end_date + INTERVAL 1 DAY
GROUP BY DATE(ts), product_id
对此很酷的一点是,您可以为此表添加transaction_type
列。如果客户退回产品,则将其标记为return
并使用负数量。如果您的商店收到一批产品,请将其标记为restock
并使用负数。然后,如果您想显示净销售额 - 销售额减去退货产品 - 这是对查询的一个小改动。
SELECT product_id,
DATE(ts) AS salesdate,
SUM(quantity) AS quantity
FROM sales
WHERE ts >= :start_date
AND ts < :end_date + INTERVAL 1 DAY
AND transaction_type IN ('sale', 'return')
GROUP BY DATE(ts), product_id
如果您想知道特定end_date每件产品的库存量,请执行此操作(从开始时间开始)。
SELECT product_id,
SUM(quantity) AS quantity
FROM sales
GROUP BY product_id
在实际的库存/销售系统中,通常每年进行一次库存,关闭上一年的销售表,然后开始一个具有每种产品起始值的新库存。通过sales_order
和sales_detail
组织销售也很常见,因此您可以跟踪每笔交易中多件商品的销售情况。