我有下表,其中包含ID和UserId&#39。
ID UserID
1111 11
1111 300
1111 51
1122 11
1122 22
1122 3333
1122 45
我试图计算不同数量的ID'所以我得到一个总数,但我也需要得到一些ID也已经看到了那个特定的身份证...为了获得身份证,我不得不在另一个表中执行子查询以获取ID,然后我将其传递给主查询...现在我只想将结果显示如下。
所以我得到ID的总数和用户ID的总数 - 还想添加另一列以获得每个ID的平均值
TotalID Total_UserID Average
2 7 3.5
如果可能我也想获得平均值,但不知道如何计算。因此,我需要计算所有用户ID以及ID,然后找到AVG。 (关于该计算的任何建议都将受到赞赏。)
当前查询。
SELECT DISTINCT(a.ID)
,COUNT(b.UserID)
FROM a
INNER JOIN b ON someID = someID
WHERE a.ID IN ( SELECT ID FROM c WHERE GROUPID = 9999)
GROUP BY a.ID
然后列出所有ID和COUNT的所有USERID ..我想要总共两列。我试过在
中扭曲查询SELECT COUNT(*) FROM (
但这只会计算ID很好的ID,但我如何计算USERID列呢
答案 0 :(得分:3)
你似乎想要这个:
SELECT COUNT(DISTINCT a.ID), COUNT(b.UserID),
COUNT(b.UserID) * 1.0 / COUNT(DISTINCT a.ID)
FROM a INNER JOIN
b
ON someID = someID
WHERE a.ID IN ( SELECT ID FROM c WHERE GROUPID = 9999);
注意:DISTINCT
不是一个函数。它适用于整行,因此将表达式放在括号后面会产生误导。
此外,GROUP BY
是不必要的。
1.0
是因为SQL Server执行整数运算,这是将数字转换为小数形式的简单方法。
答案 1 :(得分:0)
答案 2 :(得分:0)
我相信你想要这个:
select TotalID,
Total_UserID,
sum(Total_UserID+TotalID) as Total,
Total_UserID/TotalID as Average
from (
SELECT (DISTINCT a.ID) as TotalID
,COUNT(b.UserID) as Total_UserID
FROM a
INNER JOIN b ON someID = someID
WHERE a.ID IN ( SELECT ID FROM c WHERE GROUPID = 9999)
) x