我有以下疑问:
SELECT DISTINCT FIRST_VALUE(business_id)
OVER (PARTITION BY b.sub_category_id
ORDER BY AVG(stars) desc, COUNT(*) DESC) business_id,
sub_category_id
FROM purchase_experience pe
JOIN businesses b ON b.id = pe.business_id
AND b.status = 'active'
AND b.sub_category_id IN (1010 ,1007 ,1034 ,1036)
WHERE pe.stars <> 0
GROUP BY business_id
LIMIT 4
它返回类似这样的内容:
business_id | sub_category_id
1744 | 1007
13215 | 1010
9231 | 1034
9103 | 1036
这是
EXPLAIN
的结果:
可悲的是,执行大约需要7秒。知道如何优化它吗?
删除
DISTINCT
,它似乎正在尝试做与FIRST_VALUE
相同的事情。
查询似乎是一个“groupwise_max”问题。请参阅我添加的标签以获得更好的方法。或者看这里:Groupwise-Max
首先编写查询来查找整个表的统计信息,然后弄清楚如何应用groupwise-max。
还有,
LIMIT 4
,你想要哪4个?您需要 ORDER BY
来指定此类。