1

店の名前、販売日、販売された商品を含むテーブルがあります。

Shop    |    Date   | Item

Shop1   |   xxxxx   | A
Shop1   |   xxxxx   | B
Shop1   |   xxxxx   | B
Shop1   |   xxxxx   | A
Shop1   |   xxxxx   | A

そのため、商品「A」が 3 つと商品「B」が 2 つ売れました。

そのため、アイテム A (3 個販売) は合計 (5 個販売) の 60% であり、アイテム B は 40% です。

だから私はこのようなものを取得したい:

Shop1   |   A    |  3    |  60%
Shop1   |   B    |  2    |  40%

次の方法で取得する必要があります。

Select Shop, item, count(item),  count(item) *100 / (select count(item)  from table) +  '%'
from table
group by Shop, item;

私の問題は、テーブルに 1 つのショップだけが含まれているのではなく、他のショップも含まれていることです: shop1、shop2 など。

だから私はこのような結果を得たいと思います:

Shop1   |   A    |  3    |  60%
Shop1   |   B    |  2    |  40%
Shop2   |   A    |  8    |  80%
Shop2   |   B    |  2    |  20%
shop3   |   A    |  1    |  100%
shop4……

何か助けはありますか?

4

4 に答える 4

1

20000 個のランダム値を含むテーブルを作成し、上記の 3 つの回答をテストしたところ、Fedorenko の回答が benty23 よりも高速であることがわかりました。クエリ プランでは、Fedorenko の場合は 0.250533、benty23 の場合は 0.354073 でした。したがって、この質問にはウィンドウ関数を使用するのが最善の解決策です。

于 2013-06-09T13:45:25.900 に答える
0

これを試すことができます:

SELECT DISTINCT( A.SHOP ) ,A.ITEM ,COUNT(A.ITEM) アイテム ,CAST(COUNT(A.item) * 100 / B.COUNT_OF_SHOP AS VARCHAR(10)) + '%'
FROM パーセンテージ A JOIN
( SELECT ショップ ,COUNT(ショップ) AS COUNT_OF_SHOP FROM パーセンテージ GROUP BY ショップ ) B ON A.ショップ = B.ショップ
GROUP BY A.ショップ、B.ショップ、A.アイテム、B.COUNT_OF_SHOP
于 2013-06-09T11:48:03.463 に答える
0

以下が機能するはずです。

Select i.Shop, 
       i.item, 
       count(i.item), (count(i.item) * 100 / t.cnt) 
  from table1 i
  join (select shop, count(shop) as cnt from table1 group by shop) t
    on i.shop = t.shop
 group by i.Shop, i.item, t.cnt

このsqlfiddleも参照してください

于 2013-06-09T09:11:06.493 に答える