b********2 发帖数: 855 | 1 GroupMember Table结构请见图片1。
其中,GroupMemberID是PK。UserID是FK。
我想实现的功能。
UserID=3,作为一个输入的变量,然后列出该用户所在的所有Group,并且统计该Group里
相关的人数。
前半部分,也就是显示该用户所在的所有Group我已经解决,因为这个最容易。但是如
何显示出相关的人数,这个部分真的让我非常非常的抓狂啊。。。
我瞎写了一小段代码,请高手们指教。
SELECT COUNT(UserID) AS Counter
FROM GroupMembers
GROUP BY UserID
运行以上代码,可以显示出TABLE里所有不同的GROUP的人数。
但是如果我这样写。
SELECT COUNT(UserID) AS Counter
FROM GroupMembers
WHERE UserID=3
GROUP BY GroupID
结果就是错误的。。。。
毕竟不是专业DBA。。。。郁闷死我了。请高手们赐教,万分感谢。 |
B*****g 发帖数: 34098 | 2 不是专业DBA,帮你顶一下
【在 b********2 的大作中提到】 : GroupMember Table结构请见图片1。 : 其中,GroupMemberID是PK。UserID是FK。 : 我想实现的功能。 : UserID=3,作为一个输入的变量,然后列出该用户所在的所有Group,并且统计该Group里 : 相关的人数。 : 前半部分,也就是显示该用户所在的所有Group我已经解决,因为这个最容易。但是如 : 何显示出相关的人数,这个部分真的让我非常非常的抓狂啊。。。 : 我瞎写了一小段代码,请高手们指教。 : SELECT COUNT(UserID) AS Counter : FROM GroupMembers
|
i****a 发帖数: 36252 | 3 SELECT GroupID, COUNT(1) AS Counter
FROM GroupMembers
WHERE UserID=3
GROUP BY GroupID
【在 b********2 的大作中提到】 : GroupMember Table结构请见图片1。 : 其中,GroupMemberID是PK。UserID是FK。 : 我想实现的功能。 : UserID=3,作为一个输入的变量,然后列出该用户所在的所有Group,并且统计该Group里 : 相关的人数。 : 前半部分,也就是显示该用户所在的所有Group我已经解决,因为这个最容易。但是如 : 何显示出相关的人数,这个部分真的让我非常非常的抓狂啊。。。 : 我瞎写了一小段代码,请高手们指教。 : SELECT COUNT(UserID) AS Counter : FROM GroupMembers
|
B*****g 发帖数: 34098 | 4 你这个和lz的有什么区别。
Group里
是如
【在 i****a 的大作中提到】 : SELECT GroupID, COUNT(1) AS Counter : FROM GroupMembers : WHERE UserID=3 : GROUP BY GroupID
|
i****a 发帖数: 36252 | 5 without showing GroupID, who know what is what ah
【在 B*****g 的大作中提到】 : 你这个和lz的有什么区别。 : : Group里 : 是如
|
B*****g 发帖数: 34098 | 6 lz都说这个答案是不对滴
【在 i****a 的大作中提到】 : without showing GroupID, who know what is what ah
|
i****a 发帖数: 36252 | 7 with out order by, without outputing the group id, lz does not know what
those numbers are
【在 B*****g 的大作中提到】 : lz都说这个答案是不对滴
|
B*****g 发帖数: 34098 | 8 一般来说count得出来都是1
【在 i****a 的大作中提到】 : with out order by, without outputing the group id, lz does not know what : those numbers are
|
t****a 发帖数: 1212 | 9 抛砖引玉:
SELECT
GroupID
, UserCount
FROM (
SELECT GroupID
FROM GroupMembers
WHERE UserID=3
) GRP INNER JOIN (
SELECT
GroupID
, COUNT(*) AS UserCount
FROM GroupMembers
GROUP BY
GroupID
) CNT
ON
GRP.GroupID = CNT.GroupID |
i****a 发帖数: 36252 | 10 SELECT GroupID, COUNT(1) AS cnt
FROM dbo.GroupMember
WHERE GroupID IN
(
SELECT GroupID
FROM dbo.GroupMember
WHERE UserID = 3
)
GROUP BY GroupID
【在 B*****g 的大作中提到】 : 一般来说count得出来都是1
|
|
|
B*****g 发帖数: 34098 | 11 如果只让scan table一次
【在 i****a 的大作中提到】 : SELECT GroupID, COUNT(1) AS cnt : FROM dbo.GroupMember : WHERE GroupID IN : ( : SELECT GroupID : FROM dbo.GroupMember : WHERE UserID = 3 : ) : GROUP BY GroupID
|
b********2 发帖数: 855 | 12 哈哈,多谢这么多回复。我马上就去实际试验下各位的建议。
如果把这个问题还个方式来表达,其实就非常简单了。
某学生TAKE了5门课,我想知道这5门课分别都有多少学生,并同时显示该门课的相关信息 |
b********2 发帖数: 855 | 13 IMAJIA这个能用,万分感谢啊。可惜俺实在没包子。。。。能先欠着吗。。。 |
b********2 发帖数: 855 | 14 更新一下我的WORKING CODES
见图。
谢谢大家的回复。
这个QUERY现在可以返回所有该用户所在GROUP的详细信息,并且包括该GROUP所有的人
数。
可惜不知道PERFORMANCE如何了。。。估计差的要死,呵呵。 |
i****a 发帖数: 36252 | 15 DECLARE @UserID AS INT
DECLARE @UserName AS VARCHAR(50)
SET @UserID = 3
SELECT @UserName = UserName
FROM dbo.[User]
WHERE UserID = @UserID
SELECT gm.GroupID
, @UserID AS UserID
, MAX(g.GroupName) AS GroupName
, COUNT(1) AS cnt
, @UserName AS CreatorName
FROM dbo.GroupMember gm
INNER JOIN dbo.[Group] g
ON gm.GroupID = g.GroupID
WHERE gm.GroupID IN ( SELECT GroupID
FROM dbo.GroupMember
WHERE UserID = @UserID )
GROUP BY gm.GroupID
【在 b********2 的大作中提到】 : 更新一下我的WORKING CODES : 见图。 : 谢谢大家的回复。 : 这个QUERY现在可以返回所有该用户所在GROUP的详细信息,并且包括该GROUP所有的人 : 数。 : 可惜不知道PERFORMANCE如何了。。。估计差的要死,呵呵。
|
i****a 发帖数: 36252 | 16 太高級,想不出來
【在 B*****g 的大作中提到】 : 如果只让scan table一次
|
b********2 发帖数: 855 | 17 哈哈,多谢,你这个比我那个更有可读性了。。。我那个差点把自己给绕死了。。。
CreatorName那里写的好像不对,呵呵。俺睡觉去了。 |
f***g 发帖数: 10 | 18 SELECT g.GroupId, g.UserID, (SELECT COUNT(c.UserID) FROM GroupMembers AS c
WHERE c.GroupId = g.GroupId) AS GroupUserCount
FROM GroupMembers AS g
WHERE g.UserId = 3 |
b********2 发帖数: 855 | 19 哇塞,你这个QUERY完美了。。。赞。多谢多谢。
【在 f***g 的大作中提到】 : SELECT g.GroupId, g.UserID, (SELECT COUNT(c.UserID) FROM GroupMembers AS c : WHERE c.GroupId = g.GroupId) AS GroupUserCount : FROM GroupMembers AS g : WHERE g.UserId = 3
|
B*****g 发帖数: 34098 | 20 performance should be worse, hehe
SELECT groupid, COUNT ( * ) CNT
FROM groupmembers
GROUP BY groupid
HAVING SUM (CASE WHEN userid = 3 THEN 1 ELSE 0 END) > 0
【在 i****a 的大作中提到】 : 太高級,想不出來
|