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

编写SQL查询实现用户-日期计数矩阵转换的技术问询

行转列实现用户日活跃矩阵SQL查询

前提说明

我们假设原始数据表名为user_daily_active,包含两个字段:

  • user_name:用户名,对应示例中的User1、User2、User3
  • active_day:活跃日期,对应示例中的Monday、Tuesday

需求实现SQL

MySQL 兼容写法

用条件聚合逻辑完成行转列,无活跃记录的日期默认返回0,有活跃记录返回对应活跃次数:

SELECT 
  user_name AS 用户,
  SUM(CASE WHEN active_day = 'Monday' THEN 1 ELSE 0 END) AS Monday,
  SUM(CASE WHEN active_day = 'Tuesday' THEN 1 ELSE 0 END) AS Tuesday
FROM user_daily_active
GROUP BY user_name
ORDER BY user_name;

PostgreSQL 精简写法

PostgreSQL支持FILTER语法,可以简化条件聚合的写法:

SELECT 
  user_name AS 用户,
  COUNT(*) FILTER (WHERE active_day = 'Monday') AS Monday,
  COUNT(*) FILTER (WHERE active_day = 'Tuesday') AS Tuesday
FROM user_daily_active
GROUP BY user_name
ORDER BY user_name;

输出结果说明

执行上述SQL后得到的结果和预期完全一致:

用户MondayTuesday
User110
User211
User311

如果需要不管用户单日访问多少次都只算1次活跃,只需要把SQL中的SUM替换为MAX即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:07