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

如何基于sessionId与hostname表生成含逻辑判断列的汇总表?

解决方案:用分组聚合生成会话域名汇总表

嘿,这个需求其实用分组聚合加条件判断就能轻松搞定,我给你捋捋思路并给出具体的SQL实现:

核心思路

先按sessionId分组,计算每个会话下是否存在domain1和domain2这两个域名,再基于这两个结果推导你需要的四个布尔列。

具体SQL实现

SELECT
    sessionId,
    -- 仅访问domain1的会话
    CASE WHEN has_domain1 = 1 AND has_domain2 = 0 THEN 1 ELSE 0 END AS `only domain1`,
    -- 仅访问domain2的会话
    CASE WHEN has_domain1 = 0 AND has_domain2 = 1 THEN 1 ELSE 0 END AS `only domain2`,
    -- 访问domain1或domain2的会话(所有会话都会满足,不过按需求保留)
    CASE WHEN has_domain1 = 1 OR has_domain2 = 1 THEN 1 ELSE 0 END AS `domain1 OR domain2`,
    -- 同时访问domain1和domain2的会话
    CASE WHEN has_domain1 = 1 AND has_domain2 = 1 THEN 1 ELSE 0 END AS `domain1 AND domain2`
FROM (
    -- 内层查询:先统计每个会话是否包含目标域名
    SELECT
        sessionId,
        MAX(CASE WHEN hostname = 'domain1' THEN 1 ELSE 0 END) AS has_domain1,
        MAX(CASE WHEN hostname = 'domain2' THEN 1 ELSE 0 END) AS has_domain2
    FROM your_table_name -- 替换成你的实际表名
    GROUP BY sessionId
) AS session_host_summary;

代码解释

  1. 内层子查询:通过GROUP BY sessionId分组后,用MAX(CASE...)判断每个会话下是否存在对应域名——如果该会话有domain1,has_domain1就会返回1,否则为0;has_domain2同理。
  2. 外层查询:基于内层得到的两个标记值,用CASE语句分别计算四个目标列的结果,完全匹配你需要的逻辑。

这个写法是通用的,适配大部分关系型数据库(MySQL、PostgreSQL、SQL Server等),只要把your_table_name替换成你的实际表名就能直接运行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:55:29