2012-02-02 90 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的也接受了这一点,但在所有返回任何内容。

任何想法将非常感激!

Ë

+0

只需使用金额(数量)> 1或u想要的任何价值,因为你使用的总和= 1个,因此组通过将只返回结果,其中总和= 1 – 2012-02-02 12:26:35

回答

3

尝试这样的事情来获取这在他的花篮

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

,如果你想只有这在他们的篮子有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

这仍然不能返回其拥有的用户量只有一件物品在他们的篮子里。我认为'select count(uniqID)from(select uniqID,sum(qty)from salesdata where qty = 1 group by uniqID total = 1)'? – sinni800 2012-02-02 12:36:22

+0

看看我的编辑。 – fyr 2012-02-02 12:46:11

+0

好吧,现在我已经发布了关于我的扩展的答案;) – sinni800 2012-02-02 12:47:53

0

选择那些只有一个项目筐的数量。这也将过滤掉单个物品上数量高于一个的篮子。如果你不想这样做,请删除WHERE qty = 1部分。

SELECT 
    COUNT(uniqID) FROM 
    (SELECT 
     uniqID, SUM(qty) AS total 
    FROM 
     salesdata 
    WHERE 
     qty = 1 
    GROUP BY 
     uniqID 
    HAVING 
     total = 1)