我正在尝试为以下两个问题找到一个简单的MySQL语句:
我有4个表:员工,客户,订单,产品(订单中的每个条目都包含日期,参考产品,数量和对客户的引用,以及对员工的引用)。
现在我试图让所有客户的销售量(数量* product.price)在1996年比1995年更大。
并且:我想列出销售量低于平均销售量的所有员工。
真的很感激任何帮助。我已经设法使用php脚本获取信息,但我认为这可以通过一些聪明的SQL语句来完成。
有人能帮助我吗?
员工表:ID#Name
产品表:ID#NAME#PRICE
订单表:ODERID#CUSTOMERID#DATE #EMPLOYEE#PRODUCTID #QUANTITY
答案 0 :(得分:3)
对于第一部分(假设相当多的架构):
SELECT Customers.ID
FROM Customers
LEFT JOIN orders AS o1 ON o1.CustomerID=Customers.ID AND YEAR(o1.DATE) = 1995
LEFT JOIN products AS p1 ON p1.id = o1.productID
LEFT JOIN orders AS o2 ON o2.CustomerID=Customers.ID AND YEAR(o2.DATE) = 1996
LEFT JOIN products AS p2 ON p2.id = o2.productID
HAVING SUM(o1.quantity* p1.price) < SUM(o2.quantity*p2.price)
答案 1 :(得分:2)
我不知道你正在使用的数据库类型,所以我将使用sqlserver。 'Year'功能在大多数数据库中都可用,因此您应该能够重写有问题的数据库的查询。
我认为这是一个查询,它返回1996年总数比1995年高的客户的所有客户ID +总数,但我还没有测试过。 Crucial是HAVING子句,您可以根据分组结果指定WHERE类型的子句。
SELECT o.CustomerId, SUM(o.Quantity * p.Price) AS Total
FROM Orders o INNER JOIN Products p
ON o.ProductId = p.ProductId
WHERE YEAR(o.Date) == 1996
GROUP BY o.CustomerId
HAVING SUM(o.Quantity * p.Price) >
(
SELECT SUM(o.Quantity * p2.Price) AS Total
FROM Orders o2 INNER JOIN Products p2
ON o2.ProductId = p.ProductId
WHERE YEAR(o.Date) == 1995
AND o2.CustomerId = o.CustomerId
GROUP BY o.CustomerId
)
答案 2 :(得分:0)
类似的东西:
从客户c中选择* 其中(从订单o中选择sum(o.quantity * p.price),产品p,其中o.productID = p.productID和o.dateyear = 1996,o.customerID = c.customerID)&lt; (从订单o,产品p中选择总和(o.quantity * p.price),其中o.productID = p.productID和o.dateyear = 1995和o.customerID = c.customerID)
从员工e中选择*(从订单o中选择avg(o.quantity * p.price),产品p,其中o.productID = p.productID和o.empID = e.EmpID)&lt; (从订单o中选择avg(o.quantity * p.price),产品p,其中o.productID = p.productID)