Запрос MySql: Выберите лучшие 3 строки из таблицы для каждой категории

У меня есть таблица с записями, и она ссорится названная category. Я вставил слишком много статей, и я хочу выбрать только две статьи из каждой категории.

Я пытался сделать что-то вроде этого:

Я создал представление:

CREATE VIEW limitrows AS 
   SELECT * FROM tbl_artikujt ORDER BY articleid DESC LIMIT 2 

Затем я создал этот запрос:

SELECT * 
FROM tbl_artikujt 
WHERE 
   artikullid IN
   (
      SELECT artikullid
      FROM limitrows
      ORDER BY category DESC
   )
ORDER BY category DESC;

Но это не работает и дает мне только две записи?

12
задан Wes Crow 1 May 2013 в 18:20
поделиться

1 ответ

LIMIT ограничивает только количество результатов, возвращаемых оператором. То, что вы ищете, обычно называется аналитическими/оконными/ранжирующими функциями - которые MySQL не поддерживает, но которые можно эмулировать с помощью переменных:

SELECT x.*
  FROM (SELECT t.*,
               CASE 
                 WHEN @category != t.category THEN @rownum := 1 
                 ELSE @rownum := @rownum + 1 
               END AS rank,
               @category := t.category AS var_category
          FROM TBL_ARTIKUJT t
          JOIN (SELECT @rownum := NULL, @category := '') r
      ORDER BY t.category) x
 WHERE x.rank <= 3

Если вы не измените SELECT x.*, набор результатов будет включать значения rank и var_category - вам придется указать столбцы, которые вам действительно нужны, если это не так.

11
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: