V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
chaleaoch
V2EX  ›  问与答

一个 sql 不会写...

  •  
  •   chaleaoch · 2020-02-07 16:22:18 +08:00 · 1411 次点击
    这是一个创建于 1534 天前的主题,其中的信息可能已经有所发展或是发生改变。
    select id, max(field_d)
    from table_name
    group by field_a,field_b,field_c;

    报错了 id must appear in the GROUP BY clause or be used in an aggregate function

    所以 是不是只能用子查询了?

    SELECT ID
    FROM
    table_name
    WHERE
    ( field_a, field_b, field_c, field_d) IN (
    SELECT
    "field_a",
    "field_b",
    "field_c",
    MAX ( field_d ) AS "field_d"
    FROM
    "table_name"
    GROUP BY
    field_a,
    "field_b",
    "field_c"
    ORDER BY
    "field_a" DESC
    );

    谢谢
    8 条回复    2020-02-07 16:35:18 +08:00
    chaleaoch
        1
    chaleaoch  
    OP
       2020-02-07 16:22:38 +08:00
    sorry 忘记用 md 了 排版感人.
    glacer
        2
    glacer  
       2020-02-07 16:23:17 +08:00
    id 放 group by 里...
    chaleaoch
        3
    chaleaoch  
    OP
       2020-02-07 16:25:48 +08:00
    @glacer 你是认真的吗?
    liprais
        4
    liprais  
       2020-02-07 16:27:10 +08:00
    看不懂你想要啥
    chaleaoch
        5
    chaleaoch  
    OP
       2020-02-07 16:31:48 +08:00
    @liprais 我想要根据 a,b,c 三个字段 group by 取 d 的最大值的那条记录的 id.
    glacer
        6
    glacer  
       2020-02-07 16:33:41 +08:00
    @chaleaoch 从你这两条 SQL 来看,你根本就不会写 SQL
    chaleaoch
        7
    chaleaoch  
    OP
       2020-02-07 16:34:14 +08:00
    @glacer 是啊 所以才发帖求助啊.
    liprais
        8
    liprais  
       2020-02-07 16:35:18 +08:00   ❤️ 1
    @chaleaoch
    d 没有重复的话可以这样写

    select id
    from table t0 join
    (
    select max(d) as d from table group by a,b,c
    ) t1
    on t0.d = t1.d

    如果有重复的话,你需要写清楚到底要哪一条
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2679 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:56 · PVG 19:56 · LAX 04:56 · JFK 07:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.