【问题标题】:Keyset pagination with WHERE & HAVING带有 WHERE 和 HAVING 的键集分页
【发布时间】:2020-07-09 09:43:33
【问题描述】:

我遇到了一个问题,我还没有找到键集分页的解决方案:

假设我们有这个查询:

SELECT a.id, a.number, AVG(b.rating) AS rating 
FROM a LEFT JOIN b ON xxxxxxx
GROUP BY a.id
ORDER BY rating DESC, a.number DESC
LIMIT xxxx

我们应该如何对它进行键集分页?

仅对于 a.number,我们可以有 WHERE a.number < ?; 仅用于评分,我们提供HAVING rating < ?; 如果有两个条件,我们可以有WHERE (x, y) < (?, ?)

但是如何同时做HAVING和WHERE呢?

编辑: 我今天实现了这个,发现它比OFFSET分页慢,所以不推荐。

【问题讨论】:

    标签: mysql sql database pagination having


    【解决方案1】:

    你永远不能使用的地方,因为它不能'_t访问评级。

    你能做的是

    拥有 (x, y)

    SELECT a.id, a.number, AVG(b.rating) AS rating 
    FROM a LEFT JOIN b ON a.id = b.id
    GROUP BY a.id, a.number
    HAVING (a.number, rating) < (1, 1)
    ORDER BY rating DESC, a.number DESC
    LIMIT xxxx
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2019-04-29
      相关资源
      最近更新 更多