2012-02-02 12 views
1

SQLについては非常に新しいので、SQLite 3を使用して販売データを分析しています。合計がxより大きい場合のデータの計算方法

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

私は顧客が1アイテムを買ったバスケットの数を数えたいと思っています。

は、これまでのところ私はselect count(distinct uniqID) from salesdata having sum(qty) = 1;

を試してみましたが、しかし、これはa GROUP BY clause is required before HAVINGを言って、エラーを育てました。

私はその後select count(distinct uniqID) from salesdata group by uniqID having sum(qty) = 1

SQLiteのがこれを受け入れたが、私は右のどちらかではないだけの1のリストを、返されたの!試してみました

私はその後、select count(uniqID) from salesdata group by qty having sum(qty) = 1

を試みたSQLiteのもこれを受け入れたが、全く何も返されません。

アイデアは大変ありがとうございます。

E

+0

ちょうどあなたが合計= 1を使用しているので、そのグループによっては、合計= 1 –

答えて

3

あなたは自分のバスケットに1つのアイテムを持っているユーザーのみを持つようにしたい場合は、よりまたは同等のアイテムよりも彼のバスケット

select uniqID, sum(qty) as total from salesdata group by uniqID having total >= 1 

を持つすべてのユーザーを取得するために、このような何かを試してみてください=1

>=1を置き換えるよう:

select uniqID, sum(qty) as total from salesdata group by uniqID having total = 1 

あなたは自分のバスケットに1つの項目のあるユーザーの数をしたい場合は、次のようにこれを取得する:

SELECT COUNT(*) FROM (select uniqID, sum(qty) as total from salesdata group by uniqID having total 
= 1) 
+0

これはまだ持っているユーザーの量を返さないだけで結果を返します、uがしたいの合計(数量)> 1または任意の値を使用そのバスケットには1つのアイテムしかありません。私は '選択数(uniqID)から(総数= 1を持つuniqIDによってqty = 1グループのsalesdataから合計としてuniqID、合計(qty)を選択します)'と思いますか? – sinni800

+0

私の編集を見てください。 – fyr

+0

さて、私はすでに自分の内線についての回答を掲載しました;) – sinni800

0

が一つだけのアイテムを持っているバスケットの数を選択します。これはまた、1つの単一項目上の量よりも多い量のバスケットを除外します。必要がない場合は、WHERE qty = 1部分を削除してください。

SELECT 
    COUNT(uniqID) FROM 
    (SELECT 
     uniqID, SUM(qty) AS total 
    FROM 
     salesdata 
    WHERE 
     qty = 1 
    GROUP BY 
     uniqID 
    HAVING 
     total = 1) 
関連する問題