我有这个查询:
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
。但是,然后,我只得到结果集中的所有可能的行,而不仅仅是baz
和foo
的最小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/