我有这个查询:
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
?
答案 0 :(得分:1)
您可以使用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
答案 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)