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