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

mysql group by 语法的疑问。

  •  
  •   mmdsun · 2018-08-16 20:14:12 +08:00 via Android · 1021 次点击
    这是一个创建于 2298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统的两张表,合同和价格清单。是一对多的关系。 现在去需要统计合同下所有价格合。

    观察 git 历史记录, 最早 SQL 是: select 合同 id,合同名称,合同时间,sum(p.价格) from 合同 left join 价格清单 as p group by 合同 id,合同名称,合同时间

    后来 SQL 是: select 合同 id,合同名称,合同时间,sum(p.价格) from 合同 left join 价格清单 as p group by 合同 id

    mysql 没有报错。而且数据是正确的。 我记得 group by 语法是,所有被 select 的项(除聚合函数的项之外),都必须出现在 group by 中。如何解释 MySQL 的这种情况呢。

    4 条回复    2018-08-17 10:25:53 +08:00
    mmdsun
        1
    mmdsun  
    OP
       2018-08-16 20:26:34 +08:00 via Android
    百度说 MySQL 语法要求不严。group by 不用写全。数据是否正确还需确认
    panpanpan
        2
    panpanpan  
       2018-08-16 20:28:14 +08:00 via iPhone   ❤️ 1
    https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

    MySQL 优化了,没有 group by 的字段会随机返回一条。
    mmdsun
        3
    mmdsun  
    OP
       2018-08-16 21:01:17 +08:00 via Android
    @panpanpan 谢谢,我细看一下。不过我刚刚测试列结果不是随机出现。数据是正确的。
    panpanpan
        4
    panpanpan  
       2018-08-17 10:25:53 +08:00 via iPhone   ❤️ 1
    @mmdsun 你都说了是一对多的关系,那么 group by 合同 id 了,合同名称和合同时间在同一个 id 下都是相同的,随机返回一条也就不会变了啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2652 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 09:45 · PVG 17:45 · LAX 01:45 · JFK 04:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.