2012-03-21 33 views
-3

我有3个sql表:首先我存储与关键PID的产品。第二,我保存带有关键RID的发票。第三张表格用于描述在此发票中每件产品的数量。我需要这两个问题的帮助,作为一个很少使用sql的人,这有点难。我怎样才能得到所需的查询与这3个表

1)最近3个月购买量最大的产品的查询量是多少。

2)什么是查询将这3种产品的价格提高5%?

DB:

CREATE TABLE Products(
    pid INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, 
    name VARCHAR(30) NOT NULL, 
    type VARCHAR(8) NOT NULL, 
    price DOUBLE NOT NULL, 
    stock INTEGER NOT NULL); 

CREATE TABLE Invoices(
    rid INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, 
    invoicedate TIMESTAMP NOT NULL); 

CREATE TABLE Orders(
    rid INTEGER, 
    pid INTEGER, 
    quantity INTEGER NOT NULL, 
    FOREIGN KEY (pid) REFERENCES Products(pid) ON DELETE CASCADE, 
    FOREIGN KEY (rid) REFERENCES Invoices(rid) ON DELETE CASCADE); 
+1

您使用的是什么RDBMS? – Lamak 2012-03-21 20:45:11

回答

1

提高价格

update product set price=price*. 05 where pid in(give your pid seperated by comma) 
1

对于你没有指定你要多少产品才能获得第一个查询,所以这里是检索所有的查询已购买的产品,按最少订购数量:

SELECT P.name, P.type, SUM(O.quantity) Quant 
FROM Orders AS O 
INNER JOIN Products AS P 
ON O.pid = P.pid 
GROUP BY P.name, P.type 
ORDER BY Quant DESC 

对于UPDATE,这是一种使用SQL Server的方法:

UPDATE Products 
SET price = price * 1.05 
WHERE pid IN ( SELECT DISTINCT P.pid 
       FROM Orders AS O 
       INNER JOIN Products AS P 
       ON O.pid = P.pid 
       GROUP BY P.pid 
       ORDER BY SUM(O.Quantity) DESC) 
相关问题