我在视图中有以下mysql代码
SELECT
threadid,
SUM(LENGTH(pagetext)-LENGTH(REPLACE(pagetext, ' ', ''))+1)
FROM post
GROUP by threadid
这计算每列中具有相同“threadid”的单词数,并返回由threadid分组的结果。它工作正常,但我想限制只计算每列前5行的单词。如何实现这一目标?
表格结构
+-----------------+-------------+
| threadID | pagetext |
+-----------------+-------------+
| 3 | some text |
| 3 | other text |
| 5 | text |
+-----------------+-------------+
视图返回
+-----------------+-------------+
| threadID | count |
+-----------------+-------------+
| 3 | 4 |
| 5 | 1 |
+-----------------+-------------+
我希望将每个threadID的计数限制为n行。例如,如果我将计数限制为仅1行,则threadID“3”的“计数”将为2。
答案 0 :(得分:1)
SELECT
threadid,
SUM(LENGTH(pagetext)-LENGTH(REPLACE(pagetext, ' ', ''))+1) AS len
FROM (
SELECT
p1.threadid,
p2.pagetext,
COUNT(*) AS num
FROM post AS p1
JOIN post AS p2 ON p1.threadid=p2.threadid AND p1.postid <= p2.postid
GROUP BY p1.threadid, p2.pagetext
HAVING num<=5
) a
GROUP BY threadid
编辑:最好的办法是,有一个自动增加的列(我将其命名为postid
),这有助于我们获得每个帖子的前五个帖子