基本上我只是在寻找这个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的二级密钥栏)正如您所看到的,我需要的是来自每个独特商家的一个产品(具有最高主键的产品,即该商家的最新产品)。
答案 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模式,也没有任何保证,问题中的查询会产生预期的输出!