¥
立即购买

数据库查询专家

10 浏览
1 试用
0 购买
Dec 3, 2025更新

本提示词专为数据库管理和查询场景设计,能够根据用户提供的表名和查询需求,生成准确、高效的SQL查询语句。提示词采用专业数据库管理员角色设定,具备数据检索、性能优化、安全规范等多方面能力,可满足日常数据查询、报表生成、数据分析等多种业务场景需求。通过结构化的工作流程和明确的输出规范,确保生成的SQL语句既符合技术标准又易于理解执行。

包含4个提示词变量:
变量 描述 示例
表名称 需要查询的数据表名称 user_info
查询需求 具体的查询需求描述 查询用户基本信息
查询条件 查询的筛选条件 注册时间在2023年之后且状态为活跃的用户
排序要求 查询结果的排序要求 按注册时间倒序排列
查看全部

查询需求分析

  • 目标:统计近7天“mobile”平台各渠道的日活用户数(去重 user_id)、平均会话时长(秒)与平均页面浏览数。
  • 过滤条件:
    • 事件日期在最近7日(含今天)
    • 平台 = mobile
    • 剔除内部测试账号:user_id 前缀为 'test_' 或 user_id in (10001, 10002)
    • 渠道字段非空且非空字符串
  • 输出字段:日期、渠道、DAU、avg_session_seconds、avg_pages
  • 排序:日期升序,其次 DAU 降序
  • 假设:表 user_activity_log 至少包含以下字段
    • event_date(date 或可转为日期)
    • platform(文本)
    • channel(文本)
    • user_id(数值或文本)
    • session_id(会话标识)
    • session_duration_seconds(会话时长,秒)
    • page_views(会话内页面浏览数)
  • 备注:若表为事件粒度,需先按 session_id 聚合到会话粒度;若已为会话粒度,则聚合结果等同于明细。

SQL查询语句

-- 方言:PostgreSQL(12+)
WITH base AS (
  SELECT
    event_date::date AS dt,
    channel,
    user_id,
    session_id,
    COALESCE(session_duration_seconds, 0) AS session_seconds,
    COALESCE(page_views, 0) AS page_views
  FROM user_activity_log
  WHERE event_date >= current_date - INTERVAL '6 day'
    AND event_date <  current_date + INTERVAL '1 day'      -- 含今天在内近7天
    AND platform = 'mobile'
    AND channel IS NOT NULL
    AND btrim(channel) <> ''
    AND CAST(user_id AS TEXT) NOT LIKE 'test_%'            -- 剔除测试账号前缀
    AND CAST(user_id AS TEXT) NOT IN ('10001','10002')     -- 剔除指定测试账号
),
sessions AS (
  -- 若明细已为会话粒度,则此处 SUM 等价于原值
  SELECT
    dt,
    channel,
    user_id,
    session_id,
    SUM(session_seconds) AS session_seconds,
    SUM(page_views)      AS page_views
  FROM base
  GROUP BY dt, channel, user_id, session_id
),
agg AS (
  SELECT
    dt AS event_date,
    channel,
    COUNT(DISTINCT user_id)             AS dau,
    AVG(session_seconds)::numeric(18,2) AS avg_session_seconds,
    AVG(page_views)::numeric(18,2)      AS avg_pages
  FROM sessions
  GROUP BY dt, channel
)
SELECT event_date, channel, dau, avg_session_seconds, avg_pages
FROM agg
ORDER BY event_date ASC, dau DESC;

查询逻辑说明

  • 时间范围:使用 event_date 在 [当前日期-6天, 当前日期] 的闭区间,确保覆盖近7天(含今天)。采用“左闭右开”的写法实现等价效果,便于索引利用。
  • 平台与渠道过滤:
    • 仅统计 platform='mobile'
    • 渠道字段需非空且去除两端空白后不为空字符串
  • 剔除内部测试账号:
    • 以 CAST(user_id AS TEXT) NOT LIKE 'test_%' 排除以 test_ 开头的账号
    • 以 CAST(user_id AS TEXT) NOT IN ('10001','10002') 排除指定的测试账号
    • 该写法对 user_id 为数值或文本类型均可安全工作(在 PostgreSQL 中数值转文本合法)
  • 会话聚合:
    • sessions CTE 将明细汇总到会话粒度(dt, channel, user_id, session_id)并聚合 session_seconds 与 page_views
    • 若源表已为会话粒度,则该聚合为幂等(SUM 等于原值)
  • 指标计算:
    • DAU:COUNT(DISTINCT user_id) 按天按渠道去重用户数
    • 平均会话时长与平均页面浏览数:以会话为单位求均值(同一天同一渠道的所有会话)
  • 排序:按日期升序,其次按 DAU 降序

性能建议

  • 索引/分区
    • 推荐分区:按 event_date RANGE 分区,便于时间裁剪
    • 推荐复合索引(或分区内索引):
      • (platform, event_date, channel)
      • 如 DAU 计算压力大,可增加 (event_date, platform, channel, user_id) 覆盖索引以加速去重扫描
    • 若 channel 空值较多,可考虑部分索引:
      • CREATE INDEX ON user_activity_log (event_date, channel) WHERE platform='mobile' AND channel IS NOT NULL AND btrim(channel) <> '';
  • 谓词可索引性
    • 保持 WHERE 子句对 event_date 无函数包裹(已做到),利于使用索引/分区裁剪
    • 将用户过滤转换为 CAST(user_id AS TEXT) 仅在非选择性字段上执行,且发生在较小范围(时间+平台+渠道已初步过滤),对大表建议评估开销
  • 执行计划与统计信息
    • 定期 ANALYZE 保持统计信息新鲜
    • 如数据量极大且准实时要求高,可考虑预聚合到日-渠道-会话/用户事实表,或使用近似去重(如 HyperLogLog 扩展)仅在允许近似的场景下使用
  • I/O 与并行
    • PostgreSQL 可开启并行聚合(parallel aggregate),提升 COUNT DISTINCT/AVG 的吞吐

使用注意事项

  • 字段类型确认:
    • 若不存在 event_date 字段而只有 event_time(timestamp),将查询中的 event_date 换为 date(event_time),并相应调整时间过滤:
      • WHERE event_time >= date_trunc('day', now()) - INTERVAL '6 day' AND event_time < date_trunc('day', now()) + INTERVAL '1 day'
    • 若 user_id 类型固定为数值且无前缀型测试账号,可移除 LIKE 过滤,仅保留 NOT IN (10001,10002)
  • 口径确认:
    • 平均会话时长和平均页面浏览数为“会话粒度”的均值;如需按“用户粒度”均值,需先按用户聚合,再取均值
  • 数据安全:
    • 本查询仅输出聚合结果,不暴露个人标识;请确保执行环境具备最小化权限(只读,按需授权)
  • 时间语义:
    • “近7天”以数据库 current_date 所在时区为准;跨时区业务请统一到业务时区(例如 UTC+8)后再统计
  • 空白渠道:
    • 已排除 NULL 和空字符串;若存在仅空白字符的渠道值已通过 btrim 过滤排除

查询需求分析

  • 目的:统计近30天内已支付订单的GMV、订单数与客单价(GMV/订单数),并按支付方式分组输出,便于业务侧评估各支付渠道的贡献度。
  • 数据范围与过滤:
    • 时间:支付时间在近30天
    • 状态:order_status in ('paid','shipped','completed')
    • 排除测试单:tag != 'test'(同时保留 tag 为 NULL 的正常订单)
    • 币种:CNY
  • 输出字段:pay_method, order_cnt, gmv, arpu
  • 排序:GMV 降序,其次订单数降序

注:以下以 MySQL 8.0+ 为示例;如使用 PostgreSQL,见后附替代语句。

SQL查询语句

-- MySQL 8.0+
SELECT
  om.pay_method,
  COUNT(*) AS order_cnt,
  ROUND(SUM(om.pay_amount), 2) AS gmv,
  ROUND(SUM(om.pay_amount) / NULLIF(COUNT(*), 0), 2) AS arpu
FROM order_master AS om
WHERE
  om.pay_time >= NOW() - INTERVAL 30 DAY
  AND om.order_status IN ('paid', 'shipped', 'completed')
  AND om.currency = 'CNY'
  -- 排除测试订单,且保留 tag 为空的正常订单
  AND (om.tag IS NULL OR om.tag <> 'test')
GROUP BY
  om.pay_method
ORDER BY
  gmv DESC,
  order_cnt DESC;

-- 如果您的数据库是 PostgreSQL,可使用如下等价语句

-- PostgreSQL
SELECT
  om.pay_method,
  COUNT(*) AS order_cnt,
  ROUND(SUM(om.pay_amount)::numeric, 2) AS gmv,
  ROUND((SUM(om.pay_amount) / NULLIF(COUNT(*), 0))::numeric, 2) AS arpu
FROM order_master AS om
WHERE
  om.pay_time >= NOW() - INTERVAL '30 days'
  AND om.order_status IN ('paid', 'shipped', 'completed')
  AND om.currency = 'CNY'
  AND (om.tag IS NULL OR om.tag <> 'test')
GROUP BY
  om.pay_method
ORDER BY
  gmv DESC,
  order_cnt DESC;

查询逻辑说明

  • 时间过滤:使用 pay_time >= 当前时间减去30天,取滚动近30天的数据。
  • 状态过滤:仅保留已付款及之后流程的订单(paid/shipped/completed)。
  • 测试单排除:采用 (tag IS NULL OR tag <> 'test') 而非 tag <> 'test',确保 NULL 不被误排除(NULL 与任何比较结果为 UNKNOWN,会在 WHERE 中被过滤)。
  • 币种过滤:仅统计 CNY 订单,避免跨币种对 GMV 造成误差。
  • 聚合与分组:
    • order_cnt = COUNT(*)(按订单行计数)
    • gmv = SUM(pay_amount)
    • arpu = gmv / order_cnt;用 NULLIF 防止极端情况下除零错误
  • 排序:先按 gmv 降序,再按 order_cnt 降序,满足业务排序要求。
  • 数值处理:ROUND 保留两位小数,便于报表展示。

说明:示例中使用列名 pay_time、pay_amount、order_status、tag、currency、pay_method;如您的实际列名不同,请相应替换。

性能建议

  • 索引设计(MySQL 优先顺序示例):
    • 推荐复合索引: (currency, order_status, pay_time, pay_method)
      • currency、order_status 为等值过滤,放前可高效定位
      • pay_time 为范围条件,放在等值条件之后有利于范围扫描
      • pay_method 用于 GROUP BY,可减少回表排序/分组的代价
    • 若该查询频繁且对延迟敏感,可考虑覆盖索引,将 pay_amount 也放入索引末尾:
      • (currency, order_status, pay_time, pay_method, pay_amount)
      • 注意:覆盖索引更宽,会增加写入成本与存储占用,需权衡。
  • PostgreSQL 可选优化:
    • 部分索引(Partial Index):在 CNY 且状态为已支付集合上建索引,缩小索引规模
      • CREATE INDEX ON order_master (pay_time, pay_method) WHERE currency='CNY' AND order_status IN ('paid','shipped','completed');
  • 分区与数据冷热分离:
    • 若订单量很大,建议按日期对表进行分区(如按月),近30天查询可实现分区裁剪。
  • 执行计划检查:
    • 确认使用索引范围扫描而非全表扫描(EXPLAIN/EXPLAIN ANALYZE)。
    • 确认未发生不必要的 filesort 与临时表开销(MySQL)。

使用注意事项

  • 字段确认:请确认支付时间列(示例为 pay_time)与支付金额列(示例为 pay_amount)的实际名称与含义(是否含税、是否含优惠、是否含退款),避免口径偏差。
  • 时区口径:确保 pay_time 时区与 NOW() 一致;跨时区部署需统一至同一时区(如 UTC)。
  • 空值处理:当前语句会保留 pay_method 为空的分组。如需剔除未知支付方式,可追加 AND om.pay_method IS NOT NULL。
  • 退款/逆向单:若需扣除退款或仅计算净 GMV,应在条件或金额口径上明确处理(例如排除已全额退款订单,或用净入账金额字段)。
  • 安全与权限:仅统计聚合结果,无敏感个人信息字段,符合数据最小化原则。请确保执行账号仅具备只读权限。

查询需求分析

  • 目的:找出在指定仓库(WH_EAST)中,处于启用状态(active)的SKU里,当前库存低于安全库存的记录,用于库存预警与补货决策。
  • 输出字段:sku_id、仓库、类目、当前库存、安全库存、缺口量(安全库存-当前库存)、最近入库时间。
  • 过滤条件:warehouse='WH_EAST';sku_status='active';safety_stock>0;current_stock<safety_stock。
  • 排序:按缺口量降序;若缺口量相同,则按最近入库时间升序(空值排在最后)。

注:以下SQL对常见关系型数据库(MySQL、PostgreSQL、SQL Server、Oracle)均通用。如实际列名与示例不完全一致,请按实际列名替换(如last_inbound_time/recent_inbound_time、category/类别等)。

SQL查询语句

SELECT
  sku_id,
  warehouse,
  category,
  current_stock,
  safety_stock,
  (safety_stock - current_stock) AS shortage,
  last_inbound_time AS recent_inbound_time
FROM product_inventory
WHERE
  warehouse = 'WH_EAST'
  AND sku_status = 'active'
  AND safety_stock > 0
  AND current_stock < safety_stock
ORDER BY
  -- 缺口量降序
  shortage DESC,
  -- 将最近入库时间为空的记录排在最后,再按时间升序
  CASE WHEN last_inbound_time IS NULL THEN 1 ELSE 0 END ASC,
  last_inbound_time ASC;

查询逻辑说明

  • 字段选择:
    • 直接返回sku_id、warehouse、category、current_stock、safety_stock。
    • 通过表达式(safety_stock - current_stock)计算缺口量并命名为shortage。
    • 将last_inbound_time返回并命名为recent_inbound_time,便于阅读。
  • 过滤条件:
    • warehouse='WH_EAST'限定仓库范围。
    • sku_status='active'仅查询在架/启用的SKU。
    • safety_stock>0剔除无安全库存要求的SKU。
    • current_stock<safety_stock筛出低于安全库存阈值的SKU。
  • 排序规则:
    • 首先按缺口量shortage降序,优先显示缺口大的SKU。
    • 缺口量相同的SKU再按最近入库时间升序排(更早入库的在前)。
    • 使用CASE WHEN last_inbound_time IS NULL THEN 1 ELSE 0 END将空时间排在最后,确保跨数据库一致性。

性能建议

  • 索引建议(按通用优先级):
    1. 为等值过滤列建立复合索引,提高选择性过滤效率:
      • CREATE INDEX idx_pi_wh_status ON product_inventory (warehouse, sku_status);
    2. 若数据量较大,且current_stock与safety_stock常用于该类对比,可考虑增加覆盖或辅助索引,便于回表成本降低:
      • PostgreSQL/SQL Server(支持包含列):
        • CREATE INDEX idx_pi_wh_status_ss_cs ON product_inventory (warehouse, sku_status) INCLUDE (safety_stock, current_stock, category, last_inbound_time);
      • MySQL:
        • CREATE INDEX idx_pi_wh_status_ss_cs ON product_inventory (warehouse, sku_status, safety_stock, current_stock);
        • 视主键与存储引擎情况评估是否需要调整列顺序以匹配常见过滤路径。
    3. 若该类预警查询十分高频,考虑新增生成列/物化列shortage = safety_stock - current_stock,并建立索引:
      • 例如:CREATE INDEX idx_pi_wh_status_shortage ON product_inventory (warehouse, sku_status, shortage);
      • 这样既可加速过滤(shortage>0)也有利于按shortage排序。
  • 统计信息与执行计划:
    • 定期更新统计信息(ANALYZE/UPDATE STATISTICS)以确保优化器选择合适的执行计划。
    • 首次上线后使用EXPLAIN/EXPLAIN ANALYZE检查是否命中索引、回表次数与排序代价。
  • 排序优化:
    • 若生成列shortage已建立索引,可在ORDER BY中直接使用该列,减少排序代价。
    • 大数据量分页时建议结合索引游标或键集分页(例如按shortage、last_inbound_time进行seek)替代大offset。

使用注意事项

  • 列名核对:如果实际列名与示例不同(如last_inbound_time/recent_inbound_time、category/类目、sku_status等),请按实际表结构替换。
  • 空值处理:
    • 若current_stock可能为NULL且业务上应视为0,请将条件与计算改为:COALESCE(current_stock, 0) < safety_stock;并在SELECT中使用(safety_stock - COALESCE(current_stock, 0))。
  • 数据类型:
    • 确保current_stock与safety_stock为数值类型(整数或数值),避免隐式类型转换导致索引失效。
  • 权限与安全:
    • 执行查询的账号应仅具备对product_inventory表的只读权限,避免越权访问或数据修改风险。
  • 并发与一致性:
    • 报表/预警场景建议在可接受的隔离级别下执行(如READ COMMITTED),避免长事务锁表;如需强一致可配合快照/时间点查询能力(取决于数据库)。

示例详情

解决的问题

把业务问题快速转化为可直接执行的高质量SQL与清晰的逻辑说明,帮助运营、产品、分析、研发在几分钟内完成查询、报表与数据排查;通过标准化流程与输出,减少返工与沟通成本,降低对资深DBA的依赖;内置效率与安全护栏,确保结果可靠、合规、可复用;最终实现从问题到结论的闭环交付,促进团队提效与数据资产沉淀。

适用用户

数据分析师

快速拉取分群、留存、转化等核心数据;一键生成报表所需查询,专注分析结论而非语句细节。

BI与报表运营

构建看板数据源与定时报表查询;优化过滤与排序,稳定供数,降低手工维护与改动成本。

产品经理与增长团队

自助查询活跃、漏斗、渠道效果;快速验证指标口径与版本迭代,提升决策速度与试验效率。

特征总结

一键生成贴合业务的SQL查询,立刻可用,减少沟通与等待与返工
自动理解表结构与字段关系,匹配查询逻辑,避免漏查与误查与偏差
内置性能优化建议,主动规避拖慢数据库的写法,查询更顺畅并避免拥堵
提供清晰的查询目的和步骤说明,便于复盘、交接与二次复用并共享
支持条件、排序、聚合等常见需求,自由组合,快速生成报表数据与看板
识别潜在越权与敏感信息风险,给出安全提醒,合规放心使用与审计留痕
为员工、销售、库存、行为统计等场景,快速拉数与出数,支持日常运营决策
输出预期结果释义,便于校验数据口径,减少反复改动与对齐多方理解

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 550 tokens
- 4 个可调节参数
{ 表名称 } { 查询需求 } { 查询条件 } { 排序要求 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59