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

如何在PostgreSQL中实现基于查询结果的通用标签统计?

动态匹配标签实现PostgreSQL统计功能

你可以通过LATERAL子查询结合COALESCE函数实现动态标签匹配,替代原来硬编码的CASE逻辑,同时保留原有的匹配优先级规则:

SELECT
    COALESCE(matching_tag.botag, 'kein Tag') AS Tag,
    COUNT(bo.id)
FROM mdl_booking_options bo
JOIN mdl_customfield_data cfd 
    ON cfd.instanceid = bo.id 
    AND cfd.fieldid = 5
LEFT JOIN LATERAL (
    SELECT botags AS botag
    FROM table2
    WHERE cfd.value LIKE '%' || botags || '%'
    -- 复刻原硬编码逻辑的匹配优先级,可根据实际需求调整排序规则
    ORDER BY CASE botags
        WHEN 'TryUSI' THEN 1
        WHEN 'Workshop' THEN 2
        WHEN 'KOOP' THEN 3
        WHEN 'dual' THEN 4
        WHEN 'Neu' THEN 5
        ELSE 6
    END
    LIMIT 1
) AS matching_tag ON true
WHERE bo.bookingid = 17
GROUP BY COALESCE(matching_tag.botag, 'kein Tag');

关键说明:

  • LATERAL子查询会为每一条cfd数据单独执行标签匹配,通过LIMIT 1确保只返回第一个符合条件的标签。
  • ORDER BY CASE部分用来还原原硬编码逻辑中的匹配优先级,若不需要固定优先级,直接删除这部分即可。
  • COALESCE函数处理无匹配标签的场景,返回默认值kein Tag。

如果table2中存在重复标签,建议在子查询中添加DISTINCT botags去重,避免重复匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:36:11