sql – 列中具有相同值的行,将另一列中的所有值相加并显示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出现的行,但不知道如何为每个用户求和和显示?

最佳答案 您已在源数据和所需结果中包含一个名为“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).

点赞