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

如何在PostgreSQL中按相似行聚合后再按列分组?

PostgreSQL实现按type前缀分组的行转列统计

解决方案SQL

假设你的表名为user_types,执行以下SQL即可得到目标统计结果:

SELECT
    name,
    SUM(CASE WHEN type LIKE 'api%' THEN 1 ELSE 0 END) AS api,
    SUM(CASE WHEN type LIKE 'notapi%' THEN 1 ELSE 0 END) AS notapi,
    SUM(CASE WHEN type = 'misc' THEN 1 ELSE 0 END) AS misc,
    SUM(CASE WHEN type = 'other' THEN 1 ELSE 0 END) AS other
FROM user_types
GROUP BY name
ORDER BY name;

逻辑说明

  1. 行转列核心逻辑:利用SUM()聚合函数搭配CASE语句,将每行的type归属判断转换为对应列的计数。符合分组条件的行返回1,否则返回0,求和后就是该分组的总数量。
  2. 前缀匹配处理:对于api和notapi前缀的类型,用LIKE 'api%'、LIKE 'notapi%'模糊匹配,能覆盖所有以这些字符串开头的type值(比如api-43149g、notapi-3123这类带后缀的情况)。
  3. 固定值分组处理:misc、other是固定的组名,直接用type = 'misc'精确匹配即可。
  4. 分组与排序:按name分组聚合,最后按name排序让结果更规整。

执行结果

执行后会得到你需要的统计表格:

nameapinotapimiscother
joe1110
jim2100
mary0101

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:04:56