能否更新下prompt,让生成的SQL支持UNION ALL。

我使用kimi、通义灵码(其他没测试)问下面这个问题(为了脱敏,我将表名和字段名均隐藏)

能否生成一个SQL,查询G表,右加入W表,G.id = W.gid,
查询表为:G.type,
G.id AS gid,
W.a AS a,
W.b,
W.c,
W.d,
W.e,同时判断当G.type != 'UNIONType'正常返回,G.type = 'UNIONType'
将G.id聚合同时按照
SUM(W.c) AS c,
MIN(W.d) AS d,
MIN(W.e) AS e将这三项返回

之后通义灵码返回的代码


SELECT 
    CASE 
        WHEN G.type != 'UNIONType' THEN G.type 
        ELSE NULL 
    END AS type,
    CASE 
        WHEN G.type != 'UNIONType' THEN G.id 
        ELSE NULL 
    END AS gid,
    CASE 
        WHEN G.type != 'UNIONType' THEN W.a 
        ELSE NULL 
    END AS a,
    CASE 
        WHEN G.type != 'UNIONType' THEN W.b 
        ELSE NULL 
    END AS b,
    CASE 
        WHEN G.type != 'UNIONType' THEN W.c 
        ELSE NULL 
    END AS c,
    CASE 
        WHEN G.type != 'UNIONType' THEN W.d 
        ELSE NULL 
    END AS d,
    CASE 
        WHEN G.type != 'UNIONType' THEN W.e 
        ELSE NULL 
    END AS e,
    CASE 
        WHEN G.type = 'UNIONType' THEN G.id 
        ELSE NULL 
    END AS union_gid,
    SUM(CASE WHEN G.type = 'UNIONType' THEN W.c ELSE 0 END) AS union_c,
    MIN(CASE WHEN G.type = 'UNIONType' THEN W.d END) AS union_d,
    MIN(CASE WHEN G.type = 'UNIONType' THEN W.e END) AS union_e
FROM 
    G
RIGHT JOIN 
    W ON G.id = W.gid
GROUP BY 
    G.id, G.type, W.a, W.b, W.c, W.d, W.e
HAVING 
    G.type != 'UNIONType' OR union_gid IS NOT NULL;

然后调用结果......
image.png

kimi也一样,生成的格式差不多

但是我用了我同事自己训练的模型给的SQL


SELECT 
***
FROM G
RIGHT JOIN   W ON G.id = W.gid
WHERE G.type != 'UNIONType'

UNION ALL
SELECT ***

看到了吗,用UNION ALL将复杂查询直接简化成2个SQL,不仅易读而且

image.png

展开
收起
柒羽 2025-02-27 12:10:44 42 发布于重庆 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长
    -- 查询 G.type != 'UNIONType' 的部分
    SELECT 
        G.type,
        G.id AS gid,
        W.a AS a,
        W.b,
        W.c,
        W.d,
        W.e
    FROM 
        G
    RIGHT JOIN 
        W ON G.id = W.gid
    WHERE 
        G.type != 'UNIONType'
    
    UNION ALL
    
    -- 查询 G.type = 'UNIONType' 的部分
    SELECT 
        G.type,
        G.id AS gid,
        NULL AS a,  -- 因为这部分不需要 W.a 和 W.b,可以显式返回 NULL 或其他默认值
        NULL AS b,
        SUM(W.c) AS c,
        MIN(W.d) AS d,
        MIN(W.e) AS e
    FROM 
        G
    RIGHT JOIN 
        W ON G.id = W.gid
    WHERE 
        G.type = 'UNIONType'
    GROUP BY 
        G.type, G.id;
    

    第一部分处理 G.type != 'UNIONType' 的情况,直接返回所有字段。
    第二部分处理 G.type = 'UNIONType' 的情况,对 W.c、W.d 和 W.e 进行聚合。

    2025-02-28 09:04:47 举报
    赞同 168 评论

    评论

    全部评论 (0)

    登录后可评论
问答分类:
SQL
问答地址:

通义灵码是基于通义大模型的 AI 研发辅助工具,提供代码生成、研发问答、任务执行等能力,为开发者带来智能化研发体验,引领 AI 原生研发新范式。通义灵码包含 AI 编码助手和 AI 程序员。 更多信息欢迎加入通义灵码用户交流群(钉钉群号53770000738)

还有其他疑问?
咨询AI助理