Ограничить количество строк в операторе LENGTH

У меня есть следующий код 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           |
+-----------------+-------------+

Я ищу, чтобы ограничить количество счетчиков только n строк для каждого threadID. Например, если я ограничу количество только одной строкой, идентификатор потока "3" будет иметь значение "2".

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), что помогает нам получить первые пять сообщений для каждой темы.

Другие вопросы по тегам