主键列不在GROUP BY

时间:2019-03-27 05:37:36

标签: mysql

我有这个查询:

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

2 个答案:

答案 0 :(得分:1)

您可以使用JOINMIN值表中,并添加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

答案 1 :(得分:0)

使用相关子查询

SELECT foo, bar, baz, id
    FROM foos a
    WHERE bazzbazz = 'default' and baz in (select MIN(baz) from foos b where a.foo=b.foo and a.baz=b.baz)