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

SQL按user和page分组时如何将permission转为列合并为单行输出

现有写法的问题

  • 直接使用SELECT * FROM t1 GROUP BY user, page不符合SQL分组查询的语法规范:分组查询规则要求SELECT子句中仅可出现分组维度字段(你这里的user、page),或是被聚合函数包裹的非分组字段。你直接写*会尝试返回未做聚合处理的permission字段,大多数数据库要么会直接抛出语法错误,要么仅返回每个分组内第一条记录的permission值,自然无法输出所有权限的标记结果。

正确实现方案

你要做的是典型的行转列操作,使用单表的条件聚合即可实现,仅需一次表扫描,效率远高于多表关联方案,参考SQL如下:

SELECT 
  user,
  page,
  MAX(CASE WHEN permission = 'read' THEN 'X' ELSE '' END) AS `read`,
  MAX(CASE WHEN permission = 'edit' THEN 'X' ELSE '' END) AS `edit`,
  MAX(CASE WHEN permission = 'delete' THEN 'X' ELSE '' END) AS `delete`
FROM t1
GROUP BY user, page

实现逻辑说明

  • 对每个user + page的分组,分别对三种权限做条件判断:只要分组内存在对应权限的记录,CASE WHEN就会返回X,经过MAX聚合后对应列就会显示X
  • 若分组内没有对应权限的记录,最终返回的就是空字符串,和你预期的输出格式完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:02