我需要一些查询帮助(对不起,我不太擅长这个!)
我有一张表:
productid userid DateTracked
```````````````````````````````````
1 1 2010-09-11
2 1 2010-09-11
3 1 2010-09-11
4 1 2010-09-11
1 2
2 2
1 1 2010-09-13
2 1 2010-09-13
所以,我想计算每个用户购买每种产品的次数。实际上,我想选择多次从网站上购买的用户数量。 这根本不是产品用户ID的东西,我只是尽我所能地解释这个场景。
这里,Userid 1与pid 1,2,3,4相关联,然后又在另一个日期与1,2相关联。
我试过
select count(*) from MyTable group by ProductID
它给了我一个数字列表,我不确定它们表示什么,或者这就是我想要的,查询是否正确?
编辑简化:有日期,我想要选择的是次数,用户ID在不同日期重复。在上表中,userid 1有两个计数 - 一个用于日期11,一个用于13.我有x个用户ID。
我认为这可以更准确地解释我的问题。抱歉。 那么如何选择具有不同日期的所有用户ID的计数?
非常感谢答案 0 :(得分:2)
代码
select count(*) from MyTable group by ProductID
仅返回单个产品ID的计数,不提供与其相关的产品的信息。
select ProductID, count(*) as cnt from MyTable group by ProductID
为您提供productID及其相应的计数
获取用户购买的产品数量
select UserID, count(*) as cnt from MyTable group by UserID
获取用户购买特定产品的次数
Select UserID, ProductID, Count(*) as cnt from MyTable group by UserID, ProductID
答案 1 :(得分:1)
包含已注释的行,仅包含已购买超过1件的用户。
with Pur as
(
select UserID, DateTracked
from Purchase
group by UserID, DateTracked
)
select UserID, count(DateTracked) as NumberOfPurchases
from Pur
group by UserID
-- having count(DateTracked) > 1
这也可以进一步简化:
select UserID, count(distinct DateTracked)
from Purchase
group by UserID;
我没有检查过他们的执行计划,但第二个可能更快。第二个只计算每个用户的不同购买日期,这是您的主要目标。
如果用户每次购买可以购买多个相同的产品,则应使用此查询:
select ProductID, count(*)
from Purchase
group by ProductID;
如果您只想计算购买时包含某种产品的购买次数,则应使用以下查询:
select ProductID, count(distinct DateTracked)
from Purchase
group by ProductID;
答案 2 :(得分:1)
按功能分组与您的聚合函数Count(*)一起使用,以对适合您的组的数据集执行聚合函数。您正在计算表中每个productId出现的次数。见http://www.w3schools.com/sql/sql_groupby.asp
如果您想知道每个计数的含义,您应该包含ProductId
SELECT ProductId, Count(*)
FROM MyTable
GROUP BY ProductId
如果您只对特定尺寸或特定类型的产品感兴趣,可以使用 WHERE 和 HAVING 条款进一步限制。
SELECT ProductId, Count(*)
FROM MyTable
WHERE ProductType = 'MyType'
GROUP BY ProductId
HAVING Count(*) > 3
修改强> 有关按日期和userId分组的更新问题,您需要以下内容。
SELECT UserId, Date, COUNT(*)
FROM MyTable
GROUP BY UserId, Date
注意:如果将Date列存储为DATETIME,则需要将Date列转换为group by子句的DATE类型,以便为您提供所期望的结果!
答案 3 :(得分:0)
您正在计算按ProductID分组的计数,但您没有指明哪个计数属于哪个ProductID。只需将ProductID包含为输出列:
select ProductID, count(*) from MyTable group by ProductID
但是,基于您的问题,您实际上并不想按产品计算。如果您想要计算用户购买东西的不同日期的数量,请按用户ID分组并计算不同的日期:
select UserID, COUNT(DISTINCT DateTracked) from MyTable group by UserID
答案 4 :(得分:0)
您可以使用声明
SELECT productid, userid, count(*) FROM MyTable GROUP BY productid, userid
答案 5 :(得分:0)
如果你只是看看每个用户如何使用它:
SELECT userid,COUNT(productid) FROM tbl GROUP BY userid
我想这会给你:用户ID和他们购买的商品数量......
你可以写:
SELECT userid,COUNT(productid) AS cc FROM tbl GROUP BY userid HAVING cc > 1
那么你只会得到不止一次购买的用户的ID和项目数......