SQL - 计算2列的结果

时间:2016-11-15 12:16:12

标签: sql sql-server

我有下表,其中包含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列呢

3 个答案:

答案 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)

您可以使用

SELECT COUNT(DISTINCT a.ID) ...

计算所有不同的值

阅读详情here

答案 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