2017-01-30 96 views
1

示例表用戶:行一列中具有相同的值,總結所有值在另一列和顯示器1行

ID | USER_ID | SCORE | 
    1 | 555 | 50 | 
    2 | 555 | 10 | 
    3 | 555 | 20 | 
    4 | 123 | 5 | 
    5 | 123 | 5 | 
    6 | 999 | 30 | 

結果集應該像

ID | USER_ID | SCORE | COUNT | 
1 | 555 | 80 | 3 | 
2 | 123 | 10 | 2 | 
3 | 999 | 30 | 1 | 

是否有可能生成一個可以返回上面的表的SQL,到目前爲止,我只能計算某些user_id出現的行數,但不知道如何對每個用戶進行求和和顯示?

+0

您使用的是MS SQL Server還是Oracle? (不要標記不涉及的產品。) – jarlh

+1

我刪除了不兼容的數據庫標籤。請標記您真正使用的數據庫。 –

+2

提示:GROUP BY,結合SUM和COUNT。 – jarlh

回答

1

你已經包含了在源數據稱爲「ID」列和期望的結果,但我會假設這些ID值不相關,並且只是表示行或行號 - 否則問題沒有意義。

在這種情況下,你可以簡單地使用:

SELECT 
    USER_ID, 
    SUM(SCORE) AS SCORE, 
    COUNT(USER_ID) AS COUNT 
FROM 
    <Table> 
GROUP BY 
    USER_ID 

如果你真的想要生成的ID列好了,你再怎麼做到這一點取決於所使用的數據庫平臺。例如在Oracle上,您可以使用ROWNUM僞列,在SQL Server上,您將需要使用ROW_NUMBER()函數(這也適用於Oracle)。

-1
 SELECT ID 
     ,sum(SCORE) 
     ,count(USER_ID) 
FROM Table 
GROUP BY 
     ID 
+1

這將返回正確的結果,只有如果分數具有相同的價值每個user_id –

+1

這是錯誤的答案:)按ID分組不會總結user_id得分,你應該按user_id分組 – mounaim

+0

@mounaim是它應該是由user_id組,但回答編輯 –

-1

我認爲會在每個USER_ID分數的數量,如果是的話,那麼你的SQL請求應該是:

SELECT 
    ID, 
    USER_ID, 
    SUM(SCORE)AS SCORE, 
    COUNT(SCORE)AS COUNT 
FROM 
    TABLE 
GROUP BY 
    USER_ID 
相關問題