×
¥
查看详情
🔥 会员专享 文生文 SQL

生成SQL数据提取查询

👁️ 371 次查看
📅 Nov 5, 2025
💡 核心价值: 根据特定条件生成SQL查询,精准高效,适用于数据分析。

🎯 可自定义参数(2个)

查询条件
输入SQL查询需要的条件,例如:WHERE age > 30 AND city = 'Shanghai'。
输出语言
输出内容需要使用的语言,例如:Chinese。

🎨 效果示例

下面给出一份可直接运行并易于调整的留存分析 SQL。它实现以下要求:

  • 指标:7日留存(+1 至 +7 天任意一天发生 app_open 视为留存)
  • 新增定义:用户的“首日 signup”为其全生命周期第一次 signup 的日期
  • 时间范围:最近 30 天的新增用户,且保证7日观察窗完整(即 signup_date 在 [今天-30天, 今天-7天])
  • 过滤条件:platform='ios' AND country='CN'
  • AB 实验:experiment_id='onboarding_v2',按 variant 分组
  • 产出:按 cohort_date(新增日期)与 variant 粒度输出新增人数、7日留存人数与留存率;同时输出 D1~D7 的逐日留存(去重用户数与占比),便于诊断

注意:以下 SQL 假设

  • 事件表 app_events(user_id, event_name, event_timestamp, platform, country)
  • 实验分配表 user_experiments(user_id, experiment_id, variant)
  • 使用支持 DATEADD、DATEDIFF 函数的数仓(如 Snowflake/Redshift)。若为 BigQuery/Presto,请将日期函数替换为对应语法。

SQL WITH params AS ( SELECT DATEADD(day, -30, CURRENT_DATE) AS cohort_start_date, DATEADD(day, -7, CURRENT_DATE) AS cohort_end_date ), -- 仅保留 iOS/CN 的 signup 事件 signups AS ( SELECT e.user_id, CAST(e.event_timestamp AS DATE) AS signup_date FROM app_events e WHERE e.event_name = 'signup' AND e.platform = 'ios' AND e.country = 'CN' ), -- 取用户全生命周期的首日 signup first_signup AS ( SELECT user_id, MIN(signup_date) AS first_signup_date FROM signups GROUP BY user_id ), -- 取最近30天且可完整观察7天留存的 cohort([今天-30, 今天-7]) cohort_users AS ( SELECT fs.user_id, fs.first_signup_date AS cohort_date FROM first_signup fs JOIN params p ON fs.first_signup_date BETWEEN p.cohort_start_date AND p.cohort_end_date ), -- 限定在指定实验中的用户,并按 variant 分组 cohort_with_variant AS ( SELECT cu.user_id, cu.cohort_date, ue.variant FROM cohort_users cu JOIN user_experiments ue ON ue.user_id = cu.user_id AND ue.experiment_id = 'onboarding_v2' ), -- 仅保留 iOS/CN 的 app_open 事件 app_opens AS ( SELECT e.user_id, CAST(e.event_timestamp AS DATE) AS open_date FROM app_events e WHERE e.event_name = 'app_open' AND e.platform = 'ios' AND e.country = 'CN' ), -- 连接 +1~+7 天内的 app_open,计算相对首日的天数 user_open_1_7 AS ( SELECT cv.cohort_date, cv.variant, cv.user_id, DATEDIFF(day, cv.cohort_date, ao.open_date) AS days_since_signup FROM cohort_with_variant cv LEFT JOIN app_opens ao ON ao.user_id = cv.user_id AND ao.open_date BETWEEN DATEADD(day, 1, cv.cohort_date) AND DATEADD(day, 7, cv.cohort_date) ), -- 汇总:新增、7日留存,以及 D1~D7 逐日留存(均为去重用户数) cohort_agg AS ( SELECT cohort_date, variant, COUNT(DISTINCT user_id) AS new_users, COUNT(DISTINCT CASE WHEN days_since_signup BETWEEN 1 AND 7 THEN user_id END) AS retained_7d_users, COUNT(DISTINCT CASE WHEN days_since_signup = 1 THEN user_id END) AS d1_users, COUNT(DISTINCT CASE WHEN days_since_signup = 2 THEN user_id END) AS d2_users, COUNT(DISTINCT CASE WHEN days_since_signup = 3 THEN user_id END) AS d3_users, COUNT(DISTINCT CASE WHEN days_since_signup = 4 THEN user_id END) AS d4_users, COUNT(DISTINCT CASE WHEN days_since_signup = 5 THEN user_id END) AS d5_users, COUNT(DISTINCT CASE WHEN days_since_signup = 6 THEN user_id END) AS d6_users, COUNT(DISTINCT CASE WHEN days_since_signup = 7 THEN user_id END) AS d7_users FROM user_open_1_7 GROUP BY cohort_date, variant ) SELECT cohort_date, variant, new_users, retained_7d_users, CASE WHEN new_users > 0 THEN retained_7d_users::float / new_users ELSE 0 END AS retained_7d_rate, -- 逐日留存占比(用于诊断,可选) d1_users, CASE WHEN new_users > 0 THEN d1_users::float / new_users ELSE 0 END AS d1_rate, d2_users, CASE WHEN new_users > 0 THEN d2_users::float / new_users ELSE 0 END AS d2_rate, d3_users, CASE WHEN new_users > 0 THEN d3_users::float / new_users ELSE 0 END AS d3_rate, d4_users, CASE WHEN new_users > 0 THEN d4_users::float / new_users ELSE 0 END AS d4_rate, d5_users, CASE WHEN new_users > 0 THEN d5_users::float / new_users ELSE 0 END AS d5_rate, d6_users, CASE WHEN new_users > 0 THEN d6_users::float / new_users ELSE 0 END AS d6_rate, d7_users, CASE WHEN new_users > 0 THEN d7_users::float / new_users ELSE 0 END AS d7_rate FROM cohort_agg ORDER BY cohort_date, variant;

说明与可调项

  • 观察窗完整性:为避免右删截导致的低估,cohort_end_date 设为今天-7天。若需查看更近 cohort,可放宽到今天,但要注明结果受右删截影响。
  • 新增口径:使用全生命周期最早的 signup 作为新增日,确保“新增=首日 signup”。若库内 signup 可能重复或有历史缺失,请先构建“首签约表”以保证一致性。
  • 实验分配:假设每个用户在该实验下只有一个 variant。若存在多次分配且带有时间戳,需要在 user_experiments 中先用窗口函数挑选 signup 当时生效的一条记录。
  • 性能建议:为 app_events 建立分区/聚簇(按 event_date、event_name)并尽量在 CTE 中先筛选 event_name、平台与国家,以减少扫描量。

下面给出一个可直接用于计算核心漏斗(visit → add_to_cart → purchase)的按维度(channel、app_version)汇总查询。该查询基于如下假设:

  • 源表为 analytics.events(如与实际不符请替换表名)。
  • 字段包含:user_id、event_name、event_time、channel、app_version、is_internal_user、region。
  • 维度归因采用“首次 visit 的渠道与版本”。
  • 时间窗口为最近14天内发生的事件;后续加购与购买需发生在该用户首次 visit 之后,且同样在14天窗口内。
  • 漏斗第三步(purchase)仅在存在加购(add_to_cart)的前提下计数。

SQL(Snowflake/ANSI 风格): with base as ( select user_id, event_name, event_time, channel, app_version from analytics.events where is_internal_user = 0 and region = 'CN' and event_time >= dateadd('day', -14, current_timestamp()) and event_name in ('visit', 'add_to_cart', 'purchase') ), first_visit as ( select user_id, channel, app_version, event_time as visit_time from ( select user_id, channel, app_version, event_time, row_number() over (partition by user_id order by event_time) as rn from base where event_name = 'visit' ) where rn = 1 ), first_atc as ( select fv.user_id, min(b.event_time) as atc_time from first_visit fv left join base b on b.user_id = fv.user_id and b.event_name = 'add_to_cart' and b.event_time >= fv.visit_time group by fv.user_id ), first_purchase as ( select fv.user_id, min(b.event_time) as purchase_time from first_visit fv left join first_atc fa on fa.user_id = fv.user_id left join base b on b.user_id = fv.user_id and b.event_name = 'purchase' and fa.atc_time is not null and b.event_time >= fa.atc_time group by fv.user_id ) select fv.channel, fv.app_version, count(distinct fv.user_id) as visit_users, count(distinct case when fa.atc_time is not null then fv.user_id end) as add_to_cart_users, count(distinct case when fp.purchase_time is not null then fv.user_id end) as purchase_users, round( count(distinct case when fa.atc_time is not null then fv.user_id end) / nullif(count(distinct fv.user_id), 0), 4 ) as visit_to_add_to_cart_rate, round( count(distinct case when fp.purchase_time is not null then fv.user_id end) / nullif(count(distinct case when fa.atc_time is not null then fv.user_id end), 0), 4 ) as add_to_cart_to_purchase_rate, round( count(distinct case when fp.purchase_time is not null then fv.user_id end) / nullif(count(distinct fv.user_id), 0), 4 ) as visit_to_purchase_rate from first_visit fv left join first_atc fa on fa.user_id = fv.user_id left join first_purchase fp on fp.user_id = fv.user_id group by 1, 2 order by 1, 2;

说明与注意事项:

  • 该实现将漏斗维度归因固定在首次 visit 的 channel、app_version,确保后续步骤在同一用户的时间顺序上成立。
  • 如需改为“以当日/会话为单位”的漏斗或调整14天窗口的定义(例如以首次 visit 为锚点向后滚动14天),需相应修改时间过滤与分组逻辑。
  • 若使用 BigQuery,请将日期函数改为 event_time >= timestamp_sub(current_timestamp(), interval 14 day)。

以下为在未提供具体库表结构情况下的可执行范式与关键假设,并给出一版可直接运行的 BigQuery SQL(含总计与分渠道汇总)。如需迁移到其他数据仓库,请据其时间与数组函数适配。

关键假设

  • 数据仓库:BigQuery(Standard SQL)
  • 表与字段示例:
    • 用户表:project.dataset.user_profile(user_id, region, tags ARRAY)
    • 点击表:project.dataset.click_events(user_id, campaign_id, channel, event_time TIMESTAMP, region)
    • 订单表:project.dataset.orders(user_id, order_id, campaign_id, channel, order_time TIMESTAMP, gmv NUMERIC, region)
  • 标签筛选:tags 含任一标签(new_user 或 inactive_30d)。若需“同时包含”,将 OR 改为 AND。
  • 时间范围:上周为上一个自然周(周一至周日,Asia/Shanghai)。
  • 指标口径:
    • 点击->下单转化率 = 订单数 / 点击数(均为事件计数口径,未做点击-订单归因配对)。
    • 订单数 = 去重 order_id 数。
    • GMV = 订单 gmv 求和。
  • 地区筛选:CN(事件和用户维度均过滤;如事件表无 region,可仅依赖用户维度)。

SQL(BigQuery) WITH params AS ( SELECT DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Shanghai'), INTERVAL 1 WEEK), WEEK(MONDAY)) AS week_start, DATE_TRUNC(CURRENT_DATE('Asia/Shanghai'), WEEK(MONDAY)) AS week_end ), eligible_users AS ( SELECT u.user_id FROM project.dataset.user_profile u WHERE u.region = 'CN' AND ( 'new_user' IN UNNEST(u.tags) OR 'inactive_30d' IN UNNEST(u.tags) ) -- 若需同时包含两标签,改为: -- AND 'new_user' IN UNNEST(u.tags) AND 'inactive_30d' IN UNNEST(u.tags) ), clicks AS ( SELECT c.channel, COUNT(*) AS clicks FROM project.dataset.click_events c CROSS JOIN params p JOIN eligible_users u USING (user_id) WHERE c.campaign_id = 'Q4_LAUNCH' AND c.channel IN ('ch_1', 'ch_2') AND c.region = 'CN' AND c.event_time >= TIMESTAMP(p.week_start, 'Asia/Shanghai') AND c.event_time < TIMESTAMP(p.week_end, 'Asia/Shanghai') GROUP BY c.channel ), orders AS ( SELECT o.channel, COUNT(DISTINCT o.order_id) AS orders, SUM(o.gmv) AS gmv FROM project.dataset.orders o CROSS JOIN params p JOIN eligible_users u USING (user_id) WHERE o.campaign_id = 'Q4_LAUNCH' AND o.channel IN ('ch_1', 'ch_2') AND o.region = 'CN' AND o.order_time >= TIMESTAMP(p.week_start, 'Asia/Shanghai') AND o.order_time < TIMESTAMP(p.week_end, 'Asia/Shanghai') GROUP BY o.channel ), merged AS ( SELECT ch AS channel, COALESCE(c.clicks, 0) AS clicks, COALESCE(o.orders, 0) AS orders, COALESCE(o.gmv, 0) AS gmv FROM ( SELECT channel AS ch FROM clicks UNION DISTINCT SELECT channel AS ch FROM orders ) channels LEFT JOIN clicks c USING (channel) LEFT JOIN orders o USING (channel) ) SELECT channel, clicks, orders, SAFE_DIVIDE(orders, clicks) AS click_to_order_conv_rate, gmv FROM merged UNION ALL SELECT 'ALL' AS channel, SUM(clicks), SUM(orders), SAFE_DIVIDE(SUM(orders), SUM(clicks)), SUM(gmv) FROM merged ORDER BY channel;

实现与口径说明

  • 上周时间窗:以 Asia/Shanghai 的自然周作为边界。week_start 为上周一 00:00:00,week_end 为本周一 00:00:00。
  • 用户标签:假设 tags 为 ARRAY。若为以逗号分隔的字符串,可改用 REGEXP_CONTAINS(tags, r'(^|,)new_user(,|$)') OR REGEXP_CONTAINS(tags, r'(^|,)inactive_30d(,|$)')。
  • 转化率:为整体事件级转化,未做点击-订单归因配对。如需用户级转化(点击过且下过单的独立用户数 / 点击用户数),或基于点击后的 N 天归因,请说明以便调整为用户级/会话级归因模型与窗口。

示例详情

📖 如何使用

30秒出活:复制 → 粘贴 → 搞定
与其花几十分钟和AI聊天、试错,不如直接复制这些经过千人验证的模板,修改几个 {{变量}} 就能立刻获得专业级输出。省下来的时间,足够你轻松享受两杯咖啡!
加载中...
💬 不会填参数?让 AI 反过来问你
不确定变量该填什么?一键转为对话模式,AI 会像资深顾问一样逐步引导你,问几个问题就能自动生成完美匹配你需求的定制结果。零门槛,开口就行。
转为对话模式
🚀 告别复制粘贴,Chat 里直接调用
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别"手动搬运"。
即将推出
🔌 接口一调,提示词自己会进化
手动跑一次还行,跑一百次呢?通过 API 接口动态注入变量,接入批量评价引擎,让程序自动迭代出更高质量的提示词方案。Prompt 会自己进化,你只管收结果。
发布 API
🤖 一键变成你的专属 Agent 应用
不想每次都配参数?把这条提示词直接发布成独立 Agent,内嵌图片生成、参数优化等工具,分享链接就能用。给团队或客户一个"开箱即用"的完整方案。
创建 Agent

✅ 特性总结

输入业务条件,一键生成可执行SQL,覆盖筛选、聚合、排序、关联等常见分析需求,快速出数不绕路
自动优化查询结构,智能选择分组与过滤策略,减少数据扫描与等待时间,让报表更快上线
适配主流数据库语法,轻松切换日期与字符串函数,避免语法差异导致的查询报错与返工
同步输出步骤说明与结果解读建议,便于复盘分析路径,快速形成可落地的结论与行动项
支持多语言输出与结构化说明,内容清晰可复制,直接用于邮件、文档、工单与PRD附件
自动生成预处理流程,如去重、清洗、格式转换与异常剔除,保证分析口径一致、数据可靠
内置营销、留存、转化、AB测试等场景模板,一键套用即可获取关键指标与对比结果
按时间范围与指标维度自动组合最佳分组与窗口,轻松生成日报、周报、月报查询语句
提供安全提醒与校验逻辑,默认只读查询,降低误删误改风险,守护生产数据安全
给出可视化字段与命名建议,对齐数据字典,帮助生成更易理解的图表与报表标题

🎯 解决的问题

将业务口径快速、准确地转化为可直接执行的SQL查询,帮助数据分析师、产品与运营在几分钟内拿到所需数据。通过自然语言描述条件,即可生成含筛选、聚合、排序、联表等常见逻辑的标准化查询,并附带简明说明,便于审核、复用与共享。覆盖主流数据库语法,支持中英文等多语种输出,适配报表制作、增长分析、用户分群、活动复盘、漏斗与AB实验等核心场景,显著缩短从问题到数据的时间,降低错误率与沟通成本,推动试用转化与持续付费。

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。
加载中...