You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL多列统计求助:统计不同会话数对应的用户数量

解决方法

要实现你需要的统计,得分两步操作:先统计每个用户的会话数量,再针对会话数量分组统计对应的用户数。

第一步:统计单个用户的会话数

先用GROUP BY UserID按用户分组,统计每个用户拥有的唯一会话数(如果你的SessionID不会重复,也可以去掉DISTINCT,但加上能避免重复会话被重复计数,更严谨):

SELECT 
  UserID,
  COUNT(DISTINCT SessionID) AS session_count
FROM table1
GROUP BY UserID

这一步会输出每个用户对应的会话数量列表。

第二步:按会话数统计用户数量

把上面的结果作为临时表,再按session_count分组,统计有多少用户属于该会话数:

SELECT 
  session_count,
  COUNT(UserID) AS user_count
FROM (
  SELECT 
    UserID,
    COUNT(DISTINCT SessionID) AS session_count
  FROM table1
  GROUP BY UserID
) AS user_session_counts
GROUP BY session_count
ORDER BY session_count;

更易读的CTE写法(适用于MySQL 8+、SQL Server等支持CTE的数据库)

如果你的数据库支持公共表表达式(CTE),可以写成更清晰的形式:

WITH user_session_counts AS (
  SELECT 
    UserID,
    COUNT(DISTINCT SessionID) AS session_count
  FROM table1
  GROUP BY UserID
)
SELECT 
  session_count,
  COUNT(UserID) AS user_count
FROM user_session_counts
GROUP BY session_count
ORDER BY session_count;

你的原SQL问题说明

你之前的SQL没有分组,COUNT(UserID)返回的是表的总行数(若UserID不为空),COUNT(SessionID)是所有会话ID的总数,没有按用户拆分,所以无法得到“不同会话数对应的用户数量”的结果。

内容的提问来源于stack exchange,提问作者T_sql1836

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:13:23