查询结果组织

时间:2009-12-21 17:38:32

标签: sql mysql performance

我正在尝试找出格式化此查询的最有效方法。

我有三个表 - 交易,购买和物品。

所需的结果是为特定客户选择每个项目的销售数据(数量/销售总额)。


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

交易: Transaction_ID *,时间戳

购买:Purchase_ID *,Sale,Item_ID,Transaction_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 个答案:

答案 0 :(得分: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

我认为这就是你想要的好问题。 在某些地方可能有一个愚蠢的错误,因为我没有在你的桌子上测试它,但它应该让你开始。