2016-11-15 101 views
1

我有下表,其中包含ID和UserId的。SQL - 計算2列結果

ID   UserID 
1111   11 
1111   300 
1111   51 
1122   11 
1122   22 
1122   3333 
1122   45 

我想算「標識」的不同號碼,這樣我一共拿到了,但我也需要得到一個總的ID也已經看到了那個特定的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,這是偉大的,但我怎麼算USERID列以及

+0

「我還需要一個總的ID中也看到了那個特定的ID」你永遠不會顯示任何特定的ID - 你只是想知道許多不同的ID有多少UserId? – Cato

回答

3

你SE EM想這一點:

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執行整數運算,並且這是將數字轉換爲小數形式的簡單方法。

+0

解決了我的問題,看起來我離得到的語法並不遙遠。謝謝。現在我需要將我的所有查詢鏈接在一起。 – Boardman411

+0

最後一個問題 - 是否可以將AVERAGE的結果舍入爲整數。 – Boardman411

+0

@ Boardman411。 。 。這絕對不是你問的問題,但你可以使用'round()'。 –

0

您可以使用

SELECT COUNT(DISTINCT a.ID) ... 

計算所有不同值

瞭解詳情here

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