2009-12-21 105 views
1

我想弄清楚这种查询格式的最有效的方法。查询结果组织

我有三个表 - 交易,购买和项目。

期望的结果是为特定客户的每件商品选择销售数据(数量/销售总额)。


表的格式如下:( =主键)*

交易: TRANSACTION_ID *,时间戳

采购: Purchase_ID *,出售,的Item_ID,交易ID,数量

货号:的Item_ID *,CLIENT_ID,说明


至于现在我有一个查询设置来选择特定的client_id每个项目:

SELECT Item_ID, Description FROM Item WHERE Client_ID = $ClientId 

然后我存储在数组中的结果,执行查询以检索给定日期范围之间的每个Item_ID的销售数据:

SELECT Sale, Quantity 
    FROM Purchase INNER JOIN Transaction 
    ON Purchase.Transaction_ID = Transaction.Transaction_ID 
WHERE Transaction.Timestamp >= $start 
    AND Transaction.Timestamp<= $end 

然后对于每个取出的行,我总结数量。

它完成了工作,但可能不是完成这项工作的最有效方式。

我想通过销售总额订购此数据,把最大数量的第一
你怎么会去这个排序从最大到最小?

有没有办法让这一切都完成在一个查询?

+1

欢迎来到StackOverflow!这是你的第一票。 – Sampson 2009-12-21 17:39:36

+0

删除了PHP标签,因为它确实是一个仅限SQL的问题。添加了sql查询性能标签。 – Gordon 2009-12-21 17:48:39

+0

很抱歉,如果这是一个愚蠢的问题,但在这种情况下,销售总额是什么意思? – 2009-12-21 17:49:07

回答

4

下面的工作?

SELECT Item_ID, SUM(Quantity), Sum(Sale) 
FROM Item 
JOIN Purchase ON Item.Item_ID=Purchase.Item_ID 
JOIN Transaction ON Purchase.Transaction_ID=Transaction.Transaction_ID 
WHERE Client_ID = $ClientId 
AND Transaction.Timestamp>= $start 
AND Transaction.Timestamp <= $end 
GROUP BY Item_ID 
ORDER BY SUM(Quantity), SUM(Sale) DESC 

我认为这是你想要的从你问的问题。 在那里可能有一个愚蠢的错误,因为我没有在桌上测试它,但它应该让你开始。

+0

+1看起来正是他所需要的。 – gbianchi 2009-12-21 17:56:42

+0

非常好。我会试试这个。为了将来的参考,你如何突出SQL语句中的语法? – 2009-12-21 17:58:22

+0

@Derek:只需突出显示文本并单击代码(101010)图标即可。 – 2009-12-21 18:01:10