osclass计算指定id产品的销售数量

时间:2016-02-02 09:43:03

标签: osclass

我有这张表item_log

fk_i_item_id产品金额货币状态

 $sales = $conn->osc_dbFetchResult("SELECT COUNT(status) FROM %st_item_log WHERE  fk_i_item_id = '%s' AND status = 'COMPLETED'", DB_TABLE_PREFIX,osc_logged_user_id());  

 echo $sales['COUNT(status)']           

我想在同一回音中计算产品的总销售数量。

***********************************************************
fk_i_item_id      product     amount   currency    status
***********************************************************
20                Book 1       10          USD     COMPLETED
21                Book 2       12          USD     COMPLETED
20                Book 1       10          USD     COMPLETED
23                Book 3       11          USD     COMPLETED

我想要一个查询来计算数字或记录。

*******************************************************************
fk_i_item_id      product     amount   currency    status     Sales
*******************************************************************
20                Book 1       10          USD     COMPLETED    2
21                Book 2       12          USD     COMPLETED    1
23                Book 3       11          USD     COMPLETED    1

1 个答案:

答案 0 :(得分:1)

您似乎知道如何使用count()之类的聚合函数,尽管在整个表格中。

也可以在表中的行组上使用这些聚合函数。例如,要获取每个项目ID的行数,这很简单:

select   item_id,
         count(*)
from     some_table
group by item_id

所以你真正需要做的是使用group by来指定更精细的分组级别,因为如果没有它,它将分组所有所选行。

关于你想要的输出,它可能可能更有意义地总和金额(因此id 20的数量为20而不是10)尽管这很可能因事实而复杂化您似乎允许多种货币。

我不会告诉你如何解决这个问题,除了说明你可能需要在汇总之前将金额转换为基准货币。

所以,作为第一个剪辑,我会看到类似的东西:

select   fk_i_item_id,
         max(product)   as product,
         sum(amount)    as amount,
         max(currency)  as currency,
         max(status)    as status,
         count(*)       as sales
from     st_item_log
where    status = 'COMPLETED'
group by fk_i_item_id

请注意在您未分组的字段上使用“虚拟”max聚合函数。这是为了确保行仍然在项目ID上进行分组,即使,如果它们具有不同的产品描述,货币或状态值(尽管根据where子句,最后一个是不可能的)。 / p>