列中具有相同值的行,将另一列中的所有值相加并显示1行

时间:2017-01-30 13:17:08

标签: sql

示例表用户:

    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出现的行,但不知道如何为每个用户求和并显示?

3 个答案:

答案 0 :(得分:3)

您已添加一个名为" 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 :(得分:-1)

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

答案 2 :(得分:-1)

我认为COUNT是每个user_id的得分数,如果是这样,那么你的sql请求应该是:

{{1}}