限制LENGTH语句中的行数

时间:2011-09-20 08:39:15

标签: mysql view

我在视图中有以下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。

1 个答案:

答案 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),这有助于我们获得每个帖子的前五个帖子