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

SQLite:如何将GROUP BY结果转为无重复countable的两列展示

解决方案:将两个Collection的Count值转为列展示

针对你的需求,最简洁的方案是使用条件聚合,通过CASE WHEN配合聚合函数,将两个指定Collection的Count值分别提取为独立列,同时保证每个Countable仅返回一行结果。

核心SQL查询

SELECT 
    c.id AS countableId,
    c.name AS countableName,
    MAX(CASE WHEN co.collectionId = 3 THEN co.count END) AS primaryCount,
    MAX(CASE WHEN co.collectionId = 4 THEN co.count END) AS secondaryCount
FROM countable c
LEFT JOIN count co ON c.id = co.countableId
WHERE co.collectionId IN (3, 4)
GROUP BY c.id, c.name;

逻辑说明

  • 条件筛选:用CASE WHEN匹配目标Collection的ID(3和4),仅提取对应Count值,不匹配的记录返回NULL。
  • 聚合去重:通过MAX()聚合函数(因每个Countable+CollectionID组合唯一,也可使用SUM()),将每个Countable的两条记录合并为一行,自动过滤NULL值。
  • 关联表:LEFT JOIN确保即使某个Countable在目标Collection中无记录,仍会被保留(此时对应列返回NULL)。

优化:处理无记录的情况

如果希望无对应Count记录时显示0而非NULL,可使用COALESCE()函数包装聚合结果:

SELECT 
    c.id AS countableId,
    c.name AS countableName,
    COALESCE(MAX(CASE WHEN co.collectionId = 3 THEN co.count END), 0) AS primaryCount,
    COALESCE(MAX(CASE WHEN co.collectionId = 4 THEN co.count END), 0) AS secondaryCount
FROM countable c
LEFT JOIN count co ON c.id = co.countableId AND co.collectionId IN (3, 4)
GROUP BY c.id, c.name;

示例数据查询结果

执行上述优化后的查询,会得到如下结果:

countableIdcountableNameprimaryCountsecondaryCount
1Example05
2Test00
3Foo00
4Bar53

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:20