如何通过在GROUP BY中指定单个列名并启用ONLY_FULL_GROUP_BY来按工作分组

时间:2016-08-26 09:19:59

标签: mysql sql

基本上我只是在寻找这个sql语句的等价物:

SELECT * FROM products GROUP BY merchant_id ORDER BY id DESC LIMIT 10;

当ONLY_FULL_GROUP_BY被禁用时,这可以正常工作,但是当它被启用时,它不起作用。上面的等价sql语句是什么使它在ONLY_FULL_GROUP_BY模式下工作?

我想要做的就是说我有100个产品,其中1到100个ID分布在10个商家中。所以我想列出最新的10个产品,每个商家1个。

修改 这是一个示例表和预期输出。 (假设商家1,商家2等是merchnat_id的二级密钥栏)正如您所看到的,我需要的是来自每个独特商家的一个产品(具有最高主键的产品,即该商家的最新产品)。 SQL TABLE SAMPLE

1 个答案:

答案 0 :(得分:4)

在子查询中获取每个商家的max(id),在外部查询中将其连接到products表以获取其他字段:

select p.*
from products p
inner join (select merchant_id, max(id) as max_id
            from products
            group by merchant_id
            order by max(id) desc
            limit 10) t1 on p.id=t1.max_id

你不应该真正依赖MySQL如何实现轻松的group by子句,因为这可能会在没有任何通知的情况下发生变化。请记住:即使关闭了ONLY_FULL_GROUP_BY sql模式,也没有任何保证,问题中的查询会产生预期的输出!