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 の金額は 10 ではなく 20 になります)。

金額を合計する前にベースライン通貨に変換する必要があるかもしれないことを述べる以外に、それを修正する方法を説明するつもりはありません.

したがって、最初のカットとして、次のようなものを検討します。

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 に答える