«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как выбрать 3 верхних строки из каждой категории в MySQL без аналитических функций?

Как выбрать 3 верхних строки из каждой категории в MySQL без аналитических функций?

Опубликовано 3 ноября 2024 г.
Просматривать:693

How to Select the Top 3 Rows from Each Category in MySQL Without Analytic Functions?

Выбор трех верхних строк из нескольких категорий в MySQL

Выбор верхних строк из каждой категории в таблице может оказаться сложной задачей. Один метод, использующий представления и подзапросы, как описано в первой попытке, может возвращать неправильные результаты.

Более эффективный подход использует аналитические функции, которые 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 

Этот запрос инициализирует переменные @rownum и @category с помощью операции JOIN. Затем он присваивает ранг каждой строке на основе ее категории, увеличивая ранг при изменении категории.

Наконец, запрос выбирает только строки с рангом 3 или меньше. Обратите внимание, что вам может потребоваться изменить предложение SELECT x.*, чтобы включить только нужные столбцы.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3