Sql server 如何在sql server中使用group by获取类别计数?
您好,我正在为get category count创建一个查询,其中包含某个时间段的日期。在我的数据库中我有3个表,第一个是category,第二个是subcategory,第二个是subcategory。现在我想知道谁的用户遵循子类别,然后我想为类别计数。对于前用户A,跟踪类别1的3个子类别,然后用户B,跟踪类别1的相同3个子类别,然后我希望类别1用于计数,在查询中得到2,类似于此,但没有得到此类型的结果 这是我的查询=>Sql server 如何在sql server中使用group by获取类别计数?,sql-server,Sql Server,您好,我正在为get category count创建一个查询,其中包含某个时间段的日期。在我的数据库中我有3个表,第一个是category,第二个是subcategory,第二个是subcategory。现在我想知道谁的用户遵循子类别,然后我想为类别计数。对于前用户A,跟踪类别1的3个子类别,然后用户B,跟踪类别1的相同3个子类别,然后我希望类别1用于计数,在查询中得到2,类似于此,但没有得到此类型的结果 这是我的查询=> select count(*) as Count,categroyNa
select count(*) as Count,categroyName from categroy s inner join
(
select SS.categroyId from subcategory ss
inner join
(
select count(*) as count,subcategoryId from subcategoryfollow SSS
WHERE SSS.IsFollowed = 1 and CAST(SSS.InsertDateTime as date) >= CAST('2017-07-21' as date)
AND CAST(SSS.InsertDateTime as date) <= CAST('2017-07-22' as date)
group by SSS.subcategoryId,SSS.UserId
) as tab on tab.subcategoryId = ss.subcategoryId group by SS.subcategoryId
) as res on res.categroyId = s.categroyId where s.IsDeleted = 0
GROUP BY res.categroyId,categroyName
这是我的示例o/p=>
Count | categroyName
2 playing
1 Reading
表类别数据=>
categroyId | Name
1 playing
2 Reading
subcategoryId | categroyId | Name
1 1 cricket
2 1 football
3 1 wallyball
4 2 bibal
5 2 story
表子类别数据=>
categroyId | Name
1 playing
2 Reading
subcategoryId | categroyId | Name
1 1 cricket
2 1 football
3 1 wallyball
4 2 bibal
5 2 story
表子类别follow data=>
Id | UserId | subcategoryId | IsFollowed | InsertDateTime
1 10 1 1 2017-07-21 05:57:07.347
2 10 2 1 2017-07-21 05:56:02.347
3 10 3 1 2017-07-21 05:58:01.347
4 11 1 1 2017-07-21 05:59:08.347
5 11 2 1 2017-07-21 05:60:01.347
6 11 3 1 2017-07-21 05:61:06.347
7 13 4 1 2017-07-21 05:61:06.347
8 13 5 1 2017-07-21 05:61:06.347
这是我的查询和结果。现在在我的桌面游戏分类商店3个子分类,如板球,足球,壁球现在2用户遵循这3个子分类,所以我想计数2为玩类。所以请任何人都知道如何做到这一点。我很难完全理解你的问题。您正在寻找类似以下查询的内容
SELECT c.Name, COUNT( DISTINCT UserId ) AS Cnt
FROM subcategory AS sc
INNER JOIN subcategoryfollow AS scf ON sc.subcategoryId = scf.subcategoryId
INNER JOIN categroy AS s ON sc.categroyId = s.categroyId
WHERE scf.IsFollowed = 1 and CAST(scf.InsertDateTime as date) >= CAST('2017-07-21' as date)
AND CAST(scf.InsertDateTime as date) <= CAST('2017-07-22' as date)
AND s.IsDeleted = 0
GROUP BY sc.categroyId, c.Name
选择c.名称、计数(不同的用户ID)作为Cnt
从作为sc的子类别开始
内部联接子类别在sc.subcategoryId=scf.subcategoryId上跟随为scf
内部连接类别为s在sc.categroyId=s.categroyId上
其中scf.IsFollowed=1,CAST(scf.InsertDateTime作为日期)>=CAST('2017-07-21'作为日期)
和CAST(scf.InsertDateTime as date)根据示例数据和预期结果,尝试使用以下SQL语句:
SELECT ucount, category FROM (
SELECT COUNT(F.userid) AS ucount,C.name AS category
FROM Category AS C
INNER JOIN SubCategory AS S ON C.categoryid = S.categoryid
INNER JOIN SubCategoryFollow AS F ON S.subcategoryid = F.subcategoryid
GROUP BY S.name,C.name) AS UserCount
GROUP BY ucount,category;
请也提供一些样本表数据。@Loverner好的,我将展示样本数据。我猜有一种更简单的方法来编写查询。“我现在甚至不想尝试回答了。”流浪者和蒂姆·比格莱森我已经编辑了我的问题,请给我一些答案hint@TimBiegeleisen我已经编辑了我的问题,请给我一些提示怎么做