我有这个查询:

SELECT foo, bar, MIN(baz)
    FROM foos
    WHERE bazzbazz = 'default'
    GROUP BY foo, bar;


它提供所需的结果集,并具有表中不同的foo / bar组合以及它们各自的最低baz

但是,我也想获取同一查询中每一行的主键(id)。将id添加到SELECT时,收到一条错误消息,指出id不在GROUP BY中。这是查询的样子:

SELECT foo, bar, MIN(baz), id
    FROM foos
    WHERE bazzbazz = 'default'
    GROUP BY foo, bar;


为避免该错误,我可以将id添加到GROUP BY。但是,然后,我只得到结果集中的所有可能的行,而不仅仅是bazfoo的最小bar。我似乎无法使用WHERE baz = MIN(baz)

如何在不删除SQL模式id的情况下修改查询以也获得ONLY_FULL_GROUP_BY

最佳答案

您可以在JOIN值表中使用MIN进行此操作,并将baz = MIN(baz)作为JOIN条件添加:

SELECT f1.*
FROM foos f1
JOIN (SELECT foo, bar, MIN(baz) AS baz
      FROM foos
      GROUP BY foo, bar) f2 ON f2.foo = f1.foo AND f2.bar = f1.bar AND f2.baz = f1.baz


Demo on dbfiddle

关于mysql - 主键列不在GROUP BY中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55370449/

10-16 15:42