2012-02-02 7 views
1

私は非常にSQLに慣れており、SQLite 3を使用して販売データをバスケット分析しています。一度にいくつかの基準のための 'カウント'を行う方法

関連する列は、製品ID、一意のトランザクションID(バスケットを識別する)、および製品数量です。顧客が複数の商品タイプを購入した場合、一意のトランザクションIDが繰り返されます。

私は1、2、3、4、5および5以上のアイテムを購入したバスケットの数を数え、顧客の何パーセントが1アイテムしか買っていないかを分析したいと考えています。

私が使用していたコードは次のとおりです。あなたが見ることができるよう

select count (*) as One from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 0) where total = 1; 
select count (*) as Two from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 2; 
select count (*) as Three from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 3; 
select count (*) as Four from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 4; 
select count (*) as Five from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 5; 
select count (*) as Six from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 6; 
select count (*) as Sevenplus from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total > 6; 

このコードは、まず作業を行いますが、それがされて見て、むしろ扱いにくく、私はそれを開いたときに第二に、データは次の形式で出てきますExcelで:

One 
1353697 
Two 
483618 
Three 
166148 
Four 
76236 
Five 
35079 
Six 
18904 
Sevenplus 
27896 

は、理想的には私は基準の下にバスケット会議の数で、トップに沿ったアイテムの数をしたいと思います。現時点で問題を手動で手動で並べ替えることはできますが、すぐに同様の分析を行う必要があります。

コードを書く方法に関する提案は、私が望むようにそれを構造化するためには大いに感謝します!

+0

明確にするには:データが1列ではなく1列でExcelに出力されますが、質問を投稿したときに書式が変更されました。 – EAndrews

+0

あなたの問題を解決する場合は、回答を受け入れられた回答としてマークしてください。私はあなたの問題のための解決策を見つけるのに15分を費やします!どうして?私はあなたを助け、自分のスコアを収集したかったので!私は自分の時間を無駄にしましたか? –

+0

いいえ、全くありません、申し訳ありません!私は答えを受け入れることができなかったことを認識していませんでした。ご助力ありがとうございます。 – EAndrews

答えて

0

これあなたが探しているものです。

select 
    case 
    when total=1 then 'One' 
    when total=2 then 'Two' 
    when total=3 then 'Three' 
    when total=4 then 'Four' 
    when total=5 then 'Five' 
    when total=6 then 'Six' 
    when total=7 then 'SevenPlus' 
    end, 
    count(total) 
from 
    (select case when count(uniqID) <= 6 then count(uniqID) else 7 end as total from otcdata3 group by uniqID) as totals 
group by total 
order by total 

これは、2つの列を返し、最初の列は、トランザクション内の項目数を表すテキストで、2番目の列が持つ個別の購入数ですその数の項目。

関連する問題