SQLazy 让复杂SQL开发少走90%弯路 写给每天和SQL死磕的你

先聊聊日常:你是不是也在这样写SQL

从逻辑嵌套到跨库适配,从调试排错到历史交接,这些开发窘境你是否感同身受?

逻辑烧脑,嵌套成谜

业务需求复杂,SQL嵌套多层,逻辑混乱,执行结果出错。

调试漫长,耗时费力

排查错误需逐层拆解子查询,调试时间远超编写。

跨库适配,重复造轮

同一份逻辑需适配多种数据库语法,纯体力重复劳动。

历史交接,如同"拆弹"

接手无注释的“祖传SQL”,逻辑晦涩难懂,修改风险高。

需求变动,全盘重写

业务口径调整,底层SQL结构需大幅修改,迭代成本高。

我们理想中的SQL开发,本该是什么样

如果写SQL能这么爽就好了:从繁琐的重复劳动中解放,回归逻辑构建的本质。

思路清晰

逻辑分步拆解,聚焦单一目标,思路线性清晰。

调试高效

支持查看中间结果,错误源头一键定位,大幅缩短调试周期。

跨库无忧

一套核心逻辑自动适配多数据库,无需手动修改语法。

交接轻松

逻辑自带可视化文档与注释,新人接手无沟通障碍。

人机协作

AI辅助基础代码优化,核心业务逻辑由开发者掌控。

SQLazy是什么:不是AI写SQL,是编译SQL

一句话搞懂SQLazy的本质:用规范自然语言定义逻辑,确定性编译成原生SQL。

用规范自然语言写分步执行逻辑(SPEC),通过确定性编译器,而非概率性AI模型,100%准确地生成原生可执行SQL。这是从“生成式AI”到“编译式工程”的范式转变。

逻辑你说了算

全程基于你定义的明确逻辑执行,业务逻辑主导权始终在开发者手中。

结果绝对可控

由确定性编译器生成最终SQL,输出结果稳定、可复现,消除不确定性。

输出纯原生SQL

最终产物是标准、纯净的原生SQL代码,可无缝部署在任何数据库环境中。

能力一:把嵌套SQL拆成“人话步骤”

告别多层嵌套,将复杂的业务逻辑转化为直观、线性的单步操作流。

核心逻辑拆解:将需求还原为基础原子操作
Filter
筛选过滤
Sort
排序整理
Summarize
指标聚合
Join
多表关联
Rank
分组排名
Segment
分段分层

思路清晰,线性可读

每一步仅执行单一操作,撰写时顺思路,阅读时无需层层解析。

降低门槛,拒绝烧脑

将复杂逻辑拆解为简单步骤,无需强行脑补上下文,上手即用。

灵活迭代,易于维护

需求变更仅需修改对应步骤,互不干扰,避免牵一发而动全身。


计算某支股票最长连续上涨天数

SQL

WITH s2 AS (
    SELECT CODE, DT, CL FROM stock WHERE CODE = 110838
)
SELECT MAX(连涨天数) AS 最长上涨天数
FROM (
    SELECT 不涨标记, COUNT(DT) AS 连涨天数
    FROM (
        SELECT CODE, DT, CL,
            SUM(CASE WHEN CL < col__3 THEN 1 ELSE 0 END) OVER (
                ORDER BY CASE WHEN DT IS NULL THEN 1 ELSE 0 END, DT ASC
            ) + 1 AS 不涨标记
        FROM (
            SELECT s2.*, LAG(CL) OVER (
                ORDER BY CASE WHEN DT IS NULL THEN 1 ELSE 0 END, DT ASC
            ) AS col__3
            FROM s2
        ) sub__4
    ) s3
    GROUP BY 不涨标记
) s4					

SQLazy

命名 锚点 语句
s1 stock 筛选 CODE 等于 110838
s2 排序 DT 升序
s3 分段 CL 变小 命名 不涨标记
s4 汇总 DT 计数 命名 连涨天数 分组 不涨标记
汇总 连涨天数 最大 命名 最长上涨天数

能力二:逐步调试看中间结果,找bug快10倍

不用再手动拆SQL,每一步结果都看得见,让数据调试流程像代码开发一样清晰可控。

实时预览中间结果

点击任意步骤,直接查看对应中间表的完整数据,无需手动拆分执行。

精准锁定错误源头

无论是过滤条件出错还是计算逻辑偏差,都能当场定位问题环节。

调试效率量级跃升

沿用代码调试的成熟逻辑,将传统“盲猜+试错”升级为可视化、可追溯的高效流程。

彻底告别低效循环

终结“写半小时SQL,调一小时bug”的困境,聚焦业务逻辑构建与优化。


能力三:一套逻辑,多库编译

一次写清业务逻辑,系统自动适配所有数据库方言,实现跨平台无缝开发。

一键切换目标源

基于统一的逻辑描述,无需修改核心代码,即可一键切换运行的目标数据库环境。

全栈主流平台兼容

原生支持MySQL、Oracle、PG等业界主流数据库与数仓平台。

语法细节自动兼容

自动处理不同数据库的函数差异、数据类型转换及窗口函数特性。

消除重复体力劳动

彻底告别“同一业务逻辑,为适配不同数据库写N个SQL版本”的低效模式。

能力四:逻辑即文档,交接维护零压力

写出来的步骤,就是最好的开发文档,让每一行逻辑都清晰可见、有据可依。

自带注释

步骤列表本身就是清晰的计算说明,无需额外编写繁琐注释,逻辑与说明融为一体。

易于理解

无论新人接手项目,还是自己隔期回溯,只需阅读步骤流程,即可快速掌握完整业务逻辑。

易于复用

历史工单不再是晦涩难懂的“天书”,复用已有逻辑时,仅需调整关键参数即可快速适配。

知识沉淀

团队协作沟通成本大幅降低,核心业务逻辑固化为文档,彻底避免人员流动造成的知识流失。

AI辅助:只做语法转译,不抢逻辑决策权

AI是你的专业打字员,而非业务逻辑的决策者,让技术服务于思维而非替代思维

步骤1 – 自然语言描述

使用更灵活的口语描述计算步骤(如:找出CODE是110838的数据)

步骤2 – AI规范语句

AI将口语转换成规范语句(如:筛选 (CODE 等于 110838))

步骤3 – 编译生成SQL

编译器生成可执行SQL

AI仅聚焦于将自然语言描述转换为标准化的结构化工作流,严格规避主观逻辑设计

精准辅助:拒绝越界的语法工具

AI不替你设计业务逻辑,仅专注于将口语化的需求描述,精准转译为规范的代码步骤,严守“执行”边界。

具象示例:口语与语法的无缝衔接

当你输入“只留北京地区的活跃用户”,AI会自动补全为标准的 filter 过滤语法,让自然语言流畅转化为机器指令。

核心可控:从根源杜绝AI幻觉风险

关键的业务判断、筛选规则等核心逻辑由人把控,AI仅作为执行工具,彻底规避因AI生成错误逻辑带来的业务风险

专注逻辑:释放脑力聚焦业务本质

无需再耗费精力记忆复杂语法、拼写关键字,把琐碎的编码工作交给AI,让你的大脑专注于业务逻辑的梳理与优化。

更多示例

01按事件重置累计求和
源数据:
ID Date Invoiced Amount
AAA 2023-01 0 10
AAA 2023-02 0 15
AAA 2023-03 1 15
AAA 2023-04 0 10
AAA 2023-05 0 10
AAA 2023-06 1 10
BBB 2022-05 0 40
BBB 2022-06 1 20
BBB 2022-07 0 30
BBB 2022-08 1 30
目标结果:
ID Date Invoiced Amount
AAA 2023-03 1 40
AAA 2023-06 1 30
BBB 2022-06 1 60
BBB 2022-08 1 60

只保留开票行(invoiced=1),每行 Amount 是自上次开票以来的累计值

SQLazy实现:
命名 锚点 语句
t1 invoice 排序 id,dt 降序
t2 计算列 invoiced 累计 命名 grp 分区 id
t3 汇总 dt 最大 命名 dt, invoiced 最大 命名 invoiced, amount 合计 命名 amount 分组 id, grp
t4 导出表 id dt invoiced amount
编译后SQL(MySQL):
WITH invoice_groups AS (
	SELECT id, dt, invoiced, amount,
    	SUM(invoiced) OVER (PARTITION BY id ORDER BY CASE WHEN id IS NULL THEN 1 ELSE 0 END, id ASC, dt DESC ROWS UNBOUNDED PRECEDING) AS grp
  	FROM invoice
),
aggregated AS (
  	SELECT id, grp, MAX(dt) AS dt, MAX(invoiced) AS invoiced, SUM(amount) AS amount
  	FROM invoice_groups
  	GROUP BY id, grp
)
SELECT id, dt, invoiced, amount
FROM aggregated
ORDER BY id, grp

02时间间隔会话编号
account_number dt seq
19 2024-04-03 07:02:02 1
19 2024-04-03 07:02:41 2
19 2024-04-03 14:58:49 1
19 2024-04-03 19:58:49 1
19 2024-04-05 14:58:49 1
19 2024-04-05 14:59:31 2
19 2024-04-17 23:56:13 1
19 2024-04-18 00:15:13 2
19 2024-04-18 14:56:13 1
19 2024-04-19 07:41:55 1
19 2024-04-19 07:42:20 2
19 2024-04-19 08:41:20 3
20 2024-04-17 23:59:13 1
20 2024-04-18 07:41:55 1
20 2024-04-18 19:41:55 1
20 2024-04-18 19:56:55 2

需要根据前两列生成一个序列号 Seq:

  • 按账户分组,按日期时间升序处理
  • 如果当前行的活动时间与上一行的时间间隔超过 1 小时,则序列号重置为 1
  • 否则(间隔 ≤ 1 小时),序列号递增 1
SQLazy实现:
命名 锚点 语句
t1 numEvents 排序 account_number 升序 dt 升序
t2 分段 条件 ((dt [-1] 偏移 3600 秒) <= dt) 分区 account_number 命名 grp
t3 计算列 # 命名 seq 分区 account_number grp
t4 导出表 删除 grp
编译后SQL(MySQL):
WITH t1 AS (
  SELECT account_number, dt FROM numEvents
),
t2 AS (
  SELECT account_number, dt,
    1 + SUM(CASE WHEN (col__5 + INTERVAL 3600 SECOND <= dt) THEN 1 ELSE 0 END)
      OVER (PARTITION BY account_number ORDER BY account_number ASC, dt ASC) AS grp
  FROM (
    SELECT t1.*,
      LAG(dt) OVER (PARTITION BY account_number ORDER BY account_number ASC, dt ASC) AS col__5
    FROM t1
  ) sub__6
)
SELECT
  ROW_NUMBER() OVER (PARTITION BY account_number, grp ORDER BY account_number ASC, dt ASC) AS seq,
  dt,
  account_number
FROM t2
ORDER BY account_number ASC, dt ASC

03有条件的分组
源数据:
ID SPLIT CUST DATE AMOUNT
ID_1 SPLIT_YES A 2024-05-01 00:00:00 100
ID_1 SPLIT_NO A 2024-04-01 00:00:00 200
ID_1 SPLIT_YES B 2024-03-01 00:00:00 50
ID_2 SPLIT_YES A 2024-05-01 00:00:00 50
ID_2 SPLIT_NO A 2024-04-01 00:00:00 300
ID_2 SPLIT_NO B 2024-03-01 00:00:00 300
ID_3 SPLIT_YES B 2024-04-01 00:00:00 90
ID_3 SPLIT_NO B 2024-04-01 00:00:00 30
ID_3 SPLIT_NO A 2024-04-01 00:00:00 10
ID_3 SPLIT_NO A 2024-03-01 00:00:00 10
目标结果:
ID SPLIT CUST DATE AMOUNT
ID_1 SPLIT_NO A 2024-04-01 00:00:00 200
ID_1 SPLIT_YES A 2024-05-01 00:00:00 150
ID_2 SPLIT_NO A 2024-04-01 00:00:00 600
ID_2 SPLIT_YES A 2024-05-01 00:00:00 50
ID_3 SPLIT_NO A 2024-04-01 00:00:00 20
ID_3 SPLIT_NO B 2024-04-01 00:00:00 30
ID_3 SPLIT_YES B 2024-04-01 00:00:00 90

对数据表按ID和SPLIT字段分组后,根据组内日期是否重复来决定是否进一步按CUST分组,并汇总金额保留最近日期的记录。

SQLazy实现:
命名 锚点 语句
t2 splitAcc 排名 DT 降序 中式 命名 rnk 分区 ID SPLIT
t3 计算列 if (rnk = 1 then CUST else null) 命名 rnk1 分区 ID SPLIT
t4 计算列 AMOUNT 合计 命名 total_amount, rnk1 唯一计数 命名 num_cust 分区 ID SPLIT
t5 计算列 AMOUNT 合计 命名 total_cust_amount 分区 ID SPLIT CUST
t6 计算列 if (num_cust = 1 then total_amount else total_cust_amount) 命名 amt
t7 筛选 rnk = 1
导出表 ID SPLIT CUST DT amt
编译后SQL(MySQL):
WITH ranked AS (
  SELECT
    sub__13.*,
    DENSE_RANK() OVER (PARTITION BY ID, SPLIT ORDER BY DT DESC) AS rnk
  FROM splitAcc sub__13
),
with_totals AS (
  SELECT
    ID, SPLIT, CUST, DT, AMOUNT, rnk,
    CASE WHEN rnk = 1 THEN CUST ELSE NULL END AS rnk1,
    SUM(AMOUNT) OVER (PARTITION BY ID, SPLIT) AS total_amount,
    COUNT(DISTINCT CASE WHEN rnk = 1 THEN CUST ELSE NULL END) OVER (PARTITION BY ID, SPLIT) AS num_cust,
    SUM(AMOUNT) OVER (PARTITION BY ID, SPLIT, CUST) AS total_cust_amount
  FROM ranked
)
SELECT
  ID, SPLIT, CUST, DT,
  CASE WHEN num_cust = 1 THEN total_amount ELSE total_cust_amount END AS amt
FROM with_totals
WHERE rnk = 1

04按规则补齐数值
Invoices表
InvoiceID Amount ProjectID
1 100.0000 1
2 100.0000 2
3 100.0000 3
4 100.0000 4
Projects表
ID ProjectID AccountCode
1 1 12345
2 2 12345
3 2 7890
4 3 800
5 3 234
6 3 987
7 4 800
8 4 234
9 4 987
10 4 2579
目标结果:
InvoiceID Amount ProjectID AccountCode SplitAmount
1 100.0 1 12345 100.0
2 100.0 2 12345 50.0
2 100.0 2 7890 50.0
3 100.0 3 800 33.34
3 100.0 3 234 33.33
3 100.0 3 987 33.33
4 100.0 4 800 25.0
4 100.0 4 234 25.0
4 100.0 4 987 25.0
4 100.0 4 2579 25.0

关联连个表,将发票金额按项目下的账户数平均分账,金额保留两位小数,最后一个账户分剩余的钱,保证总和不变。

SQLazy实现:
命名 锚点 语句
t1 numEvents 拼接 projectid; 关联表 invoices; projectid; 拼接列 invoiceid amount
t2 排序 accountcode 升序
t3 计算列 invoiceid 计数 命名 cnt, round (amount /cnt, 2) 命名 splitamount 分区 projectid
t4 计算列 splitamount 合计 命名 saa, if (# = 1 then round (splitamount + amount - saa,2) else splitamount) 命名 f1 分区 projectid
t5 导出表 invoiceid amount accountcode projectid f1 命名 splitamount
t6 排序 invoiceid 升序 accountcode 升序
编译后SQL(MySQL):
WITH joined AS (
  SELECT p.id, p.projectid, p.accountcode, i.invoiceid, i.amount
  FROM projects p
  LEFT JOIN invoices i ON p.projectid = i.projectid
),
with_count AS (
  SELECT *,
    COUNT(invoiceid) OVER (PARTITION BY projectid) AS cnt
  FROM joined
),
with_split AS (
  SELECT *,
    ROUND(amount / cnt, 2) AS splitamount
  FROM with_count
),
with_sum AS (
  SELECT *,
    SUM(splitamount) OVER (PARTITION BY projectid) AS saa
  FROM with_split
),
adjusted AS (
  SELECT *,
    CASE
      WHEN ROW_NUMBER() OVER (PARTITION BY projectid ORDER BY accountcode ASC) = 1
      THEN ROUND(splitamount + amount - saa, 2)
      ELSE splitamount
    END AS f1
  FROM with_sum
)
SELECT invoiceid, amount, accountcode, projectid, f1 AS splitamount
FROM adjusted
ORDER BY invoiceid ASC, accountcode ASC

桌面IDE一览

步骤编辑区

可视化编辑Workflow步骤,内置语法高亮、智能帮助功能,大幅降低脚本编写门槛。

结果预览区

点击任意步骤即可即时查看对应中间结果,实现开发调试零成本试错。

SQL编译

实时编译生成原生SQL代码,一键切换MySQL、PostgreSQL等目标数据库。

LLM配置

灵活接入大模型API密钥,辅助规范查询语句。

全本地运行,数据零泄露

全程本地环境运行,数据不出内网,支持完全离线使用,从源头保障企业数据安全。

私有大模型,无限AI辅助

支持接入企业自有大模型服务,AI代码建议、优化无调用次数限制,成本可控且响应更快。

内置引擎,百万级数据调试

集成SPL计算引擎,可在本地轻松处理百万级数据集,验证逻辑效率远高于传统数据库。


三种方式对比:到底好在哪里

手写 SQL

逻辑可读性:多层嵌套结构晦涩难懂,依赖开发者个人编码习惯,新成员上手极慢。

调试与维护:需手动拆解子查询定位问题,历史代码无文档,后续维护与迭代成本极高。

适配与可靠性:多库适配纯手工重复劳动,结果完全依赖个人能力,极易出现语法与逻辑错误。

普通 AI SQL 工具

逻辑可读性:AI 生成逻辑随机发挥,无固定规范,输出结果不可控,难以理解其推导过程。

调试与维护:生成过程是黑盒,出错后无法排查原因,代码无维护性,无法长期复用。

适配与可靠性:存在AI幻觉问题,生成结果不稳定,多库适配能力弱,无法保证业务正确性。

SQLazy 智能工具

逻辑可读性:分步逻辑清晰透明,以可视化步骤生成SQL,结构规范,任何人都能快速理解。

调试与维护:每一步操作均可验证,问题可精准定位;步骤即文档,后续维护成本极低。

适配与可靠性:编译级保证结果100%正确,支持多数据库一键切换自动适配,彻底消除幻觉。

核心优势:SQLazy 兼顾了 AI 的效率与手写代码的可控性,是更透明、可靠的数据库开发工具。

你最关心的:学习成本高吗?

半天就能上手,不用推翻现有习惯,让学习过程轻量又高效

核心概念极简,上手极速

基础运算不到20个,沿用熟悉的SQL核心概念,仅替换为更直观的写法。

真实场景示例库

多个覆盖各行业的真实业务场景示例,无需从零构建,即可快速上手。

兼容现有能力,而非替代

它不是要你抛弃纯粹的SQL技能,而是为你提供一套更高效的逻辑组织方式。

无缝融入现有工作流

最终输出的是标准原生SQL语句,可直接在现有数据库、BI工具中运行,与各类数据平台完全兼容。

你最关心的:学习成本高吗?

半天就能上手,不用推翻现有习惯,让学习过程轻量又高效

核心概念极简,上手极速

基础运算不到20个,沿用熟悉的SQL核心概念,仅替换为更直观的写法。

真实场景示例库

多个覆盖各行业的真实业务场景示例,无需从零构建,即可快速上手。

兼容现有能力,而非替代

它不是要你抛弃纯粹的SQL技能,而是为你提供一套更高效的逻辑组织方式。

无缝融入现有工作流

最终输出的是标准原生SQL语句,可直接在现有数据库、BI工具中运行,与各类数据平台完全兼容。

SQLazy让数据操作更简单高效

在线体验

访问 sqlazy.com 即可体验SQLazy功能,无需注册,免费使用

文档与示例库

GitHub 仓库 github.com/SPLWare/SQLazy 提供完整的代码示例与详细技术文档

问题与建议反馈

若有疑问或改进建议,欢迎前往项目 Issue 区提交,我们会及时响应与优化