Sql server 如何在sql server中使用group by获取类别计数?

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

您好,我正在为get category count创建一个查询,其中包含某个时间段的日期。在我的数据库中我有3个表,第一个是category,第二个是subcategory,第二个是subcategory。现在我想知道谁的用户遵循子类别,然后我想为类别计数。对于前用户A,跟踪类别1的3个子类别,然后用户B,跟踪类别1的相同3个子类别,然后我希望类别1用于计数,在查询中得到2,类似于此,但没有得到此类型的结果

这是我的查询=>

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我已经编辑了我的问题,请给我一些提示怎么做