Skip to content

SQL分析

涌现平台采用 Trino 查询引擎,支持您直接编写 SQL 查询语句,灵活获取项目中的所有数据,满足高度定制化、复杂场景下的数据分析需求。

核心价值

  • 解决复杂的数据分析需求,突破可视化模型的限制。
  • 支持以下关键能力:
    1. 跨项目数据整合:如合并新服与老服数据进行对比分析。
    2. 自定义计算指标:构建专属指标,如玩家战力成长曲线、复合LTV模型。
    3. 深度用户分群:精准圈定复杂条件人群,如“连续3天未登录的高价值付费玩家”。

业务场景示例

✅ 场景一:今日新增

sql
/* 今日新增 */
SELECT event_name,
       SUM(CASE
               WHEN dates = '合计' THEN "#_nums"
               ELSE 0
           END) AS "summary@nums",
       SUM(CASE
               WHEN dates = '2025-08-05' THEN "#_nums"
               ELSE 0
           END) AS "2025-08-05"
FROM (
        (SELECT dates,
                "#_event_name" AS event_name,
                count(DISTINCT ys_system_id) AS "#_nums"
         FROM
           (SELECT a.*,
                   init_part_date AS dates,
                   '新增玩家' AS "#_event_name"
            FROM
              (SELECT *
               FROM bidata.ve_1009 AS a) AS a
            WHERE 1=1
              AND a.init_part_event = 'event_createrole_begin'
              AND init_part_date >= '2025-08-05'
              AND init_part_date <= '2025-08-05' ) AS a
         GROUP BY dates,
                  "#_event_name"
         ORDER BY dates ASC,"#_event_name" ASC))
GROUP BY event_name
ORDER BY event_name ASC

✅ 场景二:活跃留存

sql
/* 活跃留存 */
WITH base AS (

    SELECT DISTINCT DATE(init_part_date) AS init_part_date, father_account_id
    FROM ve_82
    WHERE DATE(init_part_date) BETWEEN date_add('day', -6, current_date) AND current_date
    and ys_event_name = 'server_log_in'
),

retention AS (

    SELECT 
        b1.init_part_date AS cohort_date,  
        b1.father_account_id,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 1, b1.init_part_date) THEN 1 ELSE 0 END) AS D1_active,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 2, b1.init_part_date) THEN 1 ELSE 0 END) AS D2_active,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 3, b1.init_part_date) THEN 1 ELSE 0 END) AS D3_active,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 4, b1.init_part_date) THEN 1 ELSE 0 END) AS D4_active,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 5, b1.init_part_date) THEN 1 ELSE 0 END) AS D5_active,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 6, b1.init_part_date) THEN 1 ELSE 0 END) AS D6_active,
        MAX(CASE WHEN DATE(b2.init_part_date) = date_add('day', 7, b1.init_part_date) THEN 1 ELSE 0 END) AS D7_active
    FROM base b1
    LEFT JOIN ve_82 b2
    ON b1.father_account_id = b2.father_account_id
    AND DATE(b2.init_part_date) BETWEEN date_add('day', 1, b1.init_part_date) AND date_add('day', 7, b1.init_part_date)
            and ys_event_name = 'server_log_in'
    GROUP BY b1.init_part_date, b1.father_account_id
)

SELECT 
    cast("cohort_date" AS varchar) "日期",
    COUNT(father_account_id) AS "活跃人数", 
    CONCAT(cast(ROUND(SUM(D1_active) * 100.0 / COUNT(father_account_id), 2) as varchar), '%') AS "次留",
    CONCAT(cast(ROUND(SUM(D2_active) * 100.0 / COUNT(father_account_id), 2)as varchar), '%') AS "三留",
    CONCAT(cast(ROUND(SUM(D3_active) * 100.0 / COUNT(father_account_id), 2)as varchar), '%') AS "四留",
    CONCAT(cast(ROUND(SUM(D4_active) * 100.0 / COUNT(father_account_id), 2)as varchar), '%') AS "五留",
    CONCAT(cast(ROUND(SUM(D5_active) * 100.0 / COUNT(father_account_id), 2)as varchar), '%') AS "六留",
    CONCAT(cast(ROUND(SUM(D6_active) * 100.0 / COUNT(father_account_id), 2)as varchar), '%') AS "七留"
FROM retention
GROUP BY cohort_date
ORDER BY cohort_date DESC

SQL

在编写时需要注意下面几点:

  • 字段名请使用双引号 " " 括起,也可以缺省,但如果您查询的字段名带有特殊符号(如$、#),则必须使用双引号
  • 字符串请必须使用单引号 ' '括起
  • 可以使用SELECT语句以及WITH子句
  • 在编写查询语句的过程中,您可以参考“表结构”中信息,复制表名或者表内的字段名,您也可以通过“表解析”自动将包含所有字段的查询语句插入到输入框内。

您也可以将当前语句输入框中的内容保存为书签,避免未编写完成的内容丢失,已保存的书签可以在“语句书签”中找到。 如果您需要在查询语句中使用动态时间,或者希望其他成员可以动态调整查询语句中部分内容,可以通过添加 动态参数 实现。

查询结果

查看查询结果并保存为报表/标签等

点击“计算”按钮后,您可以查看本次SQL语句的运行结果,最多展示1000行明细数据,如需查看全量数据请下载CSV文件,最大支持100万行数据。您也可以将本次查询结果保存为“临时表”,临时表可以在后续查询中使用。

除了直接查看数据明细,您也可以通过可视化模块中提供的折线图、饼状图等多种图表类型展示数据,您还可以将当前查询语句以及可视化配置保存为报表,并共享给其他成员。