2017-01-30 5 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が表示されている行を数えることしかできませんが、すべてのユーザーの合計と表示方法はわかりません。

SELECT 
    ID, 
    USER_ID, 
    SUM(SCORE)AS SCORE, 
    COUNT(SCORE)AS COUNT 
FROM 
    TABLE 
GROUP BY 
    USER_ID 
+0

MS SQL ServerまたはOracleを使用していますか? (含まれていない製品にはタグを付けないでください) – jarlh

+1

互換性のないデータベースタグを削除しました。実際に使用しているデータベースにタグを付けてください。 –

+2

ヒント:SUMとCOUNTを組み合わせたGROUP BY。 – jarlh

答えて

1

あなたは、ソースデータの両方に「ID」という列が含まれていました:

-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

私はCOUNTがそうなら、あなたのSQL要求をする必要があり、user_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でも有効です)。

関連する問題