如何编写MySQL查询实现Logins列求和及去重列值计数求和
解决MySQL中两种求和需求的查询语句
1. 直接对现有Logins列求和
如果你的数据已经是按月份统计好的(就像你给出的示例结果),要计算所有月份的登录总数非常简单,直接用SUM()函数对Logins列求和即可。假设存储这些统计数据的表名为monthly_login_stats,查询语句如下:
SELECT SUM(Logins) AS total_login_count FROM monthly_login_stats;
执行这条语句后,就会得到示例中的结果49,别名total_login_count方便你快速识别结果含义。
2. 基于去重列值计数后的求和
如果你的需求是从原始登录记录(而非已聚合的月份统计数据)出发,先按月份对用户去重(比如同一个用户当月多次登录仅算一次),统计每个月的独立登录用户数后再求和,这里提供两种实现方式:
方式一:子查询分步统计
先通过子查询按年月分组,算出每个月的独立用户数,再在外层对这些数值求和:
SELECT SUM(monthly_unique_users) AS total_unique_login_users FROM ( SELECT COUNT(DISTINCT user_id) AS monthly_unique_users FROM login_records GROUP BY MONTH(login_date), YEAR(login_date) ) AS monthly_unique_stats;
这里假设原始登录记录表为login_records,包含user_id(用户唯一标识)和login_date(登录日期)字段。
方式二:直接计数唯一组合
还有更简洁的写法:直接统计「用户-年月」的唯一组合总数,本质和上面的分步统计结果一致:
SELECT COUNT(DISTINCT CONCAT(YEAR(login_date), '-', MONTH(login_date), '-', user_id)) AS total_unique_login_users FROM login_records;
通过拼接年月与用户ID生成唯一标识,去重后直接计数,省去了子查询的步骤。
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

