【问题标题】:SQL Server query: average progression of users stepsSQL Server 查询:用户步数的平均进度
【发布时间】:2021-06-05 20:31:10
【问题描述】:

我有一个用户表和一个存储用户每天步数的表。

我需要一个 T-SQL 查询来显示平均用户步数随时间的进展情况,并查明普通用户是否随着时间的推移而增加了更多步数。

换句话说:我想显示用户自第一步进入以来是否进行了更多步骤(趋势,稍后在图表中)。

我真的不知道如何将其投影到查询中

我的桌子是

用户:

UserId
Int

步数历史:

StepsHistoryId UserId DateStepsMade StepsCount
Int Int Date Int

【问题讨论】:

  • 样本数据和预期输出会有所帮助
  • 恕我直言,不要将表的单复数名称混用。

标签: sql-server database


【解决方案1】:

我使用 AVG 聚合的简单 GROUP BY 应该可以让您获得每个用户的平均步数。加入Users表会覆盖未做任何步骤的用户

SELECT Users.UserId, ISNULL(AVG(StepsHistory.StepsCount), 0)
FROM Users
LEFT JOIN StepsHistory ON Users.UserId=StepsHistory.UserId
GROUP BY Users.UserId

您可以添加一个 UNION ALL 来获取列表开头所有用户的平均值:

SELECT NULL, AVG(StepsHistory.StepsCount)
FROM StepsHistory
UNION ALL
SELECT Users.UserId, ISNULL(AVG(StepsHistory.StepsCount), 0)
FROM Users
LEFT JOIN StepsHistory ON Users.UserId=StepsHistory.UserId
GROUP BY Users.UserId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多