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

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

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

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

Выбор верхних строк для каждой категории в MySQL

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

Объяснение

  • Подзапрос выбирает все строки из таблицы TBL_ARTIKUJT и инициализирует две переменные сеанса: @rownum и @category, для отслеживания текущего рейтинга и категории.
  • ранг, присвоенный каждой строке, указывает ее положение в категории. При обнаружении новой категории ранг сбрасывается на 1.
  • var_category используется для хранения категории для каждой строки.
  • Внешний оператор SELECT фильтрует подзапрос, выбирая только строки с рангом. меньше или равно 3.

Этот метод позволяет реализовать желаемую функциональность, не полагаясь на аналитические функции, которые не поддерживаются MySQL.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3