0

我有这张桌子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
4

1 回答 1

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

于 2016-02-03T01:07:09.253 回答