【问题标题】:How does MySQL decide which id to return in group by clause?MySQL 如何决定在 group by 子句中返回哪个 id?
【发布时间】:2010-11-29 21:08:36
【问题描述】:

比如这个:

SELECT id, count( * ) , 公司 来自jobs 按公司分组

其中id是jobs的主键

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    类似的问题:

    Why does MySQL allow "group by" queries WITHOUT aggregate functions?

    这是 MySQL 特有的,不是 ANSI 标准 SQL。大多数其他数据库引擎不允许未分组或通过聚合函数运行的列。

    似乎 MySQL 保留了与条件匹配的第一行的值。

    具有这种行为的聚合函数是 FIRST(),虽然 MySQL 实现了它,但这似乎是未分组的列的默认行为,也没有通过任何其他聚合函数运行。

    在 ANSI 标准 SQL 中你会这样做:

    SELECT FIRST(jobtitle), company FROM jobs GROUP BY company;
    

    而在 MySQL 中,您可以(但 ANSI 标准也同样适用):

    SELECT jobtitle, company FROM jobs GROUP BY company;
    

    【讨论】:

    • FWIW,SQLite 也支持这种非标准的 group-by 行为,但 SQLite 返回组中 last 匹配行的值。
    • 这个答案是错误的:MySql 不支持 FIRST 关键字(dev.mysql.com/doc/refman/5.1/en/group-by-functions.html)。此外,会选择一个随机匹配值 - 不一定是出现在组中的第一行中的值。
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多