Mysql выбирает топ-10 аналитических функций каждой категории - PullRequest
1 голос
/ 24 ноября 2011

У меня есть таблица, в которой есть следующие два столбца, включая другие: рейтинг, цена и код.Рейтинги похожи на категорию.Я хочу создать топ-10 для каждого рейтингового ордера по возрастанию цены, где код = 'ABC'.Я затрудняюсь понять, куда поместить последние два условия в следующем операторе mysql.Пожалуйста, может кто-нибудь посоветовать.Большое спасибо

SELECT x.*
  FROM (SELECT t.*,
               CASE 
                 WHEN @rating != t.rating THEN @rownum := 1
                 ELSE @rownum := @rownum + 1 
               END AS rank,
               @rating := t.rating AS var_rating
          FROM offers t
          JOIN (SELECT @rownum := NULL, @rating := '') r
      ORDER BY t.rating) x
 WHERE x.rank <= 10

А также, что если в столбце рейтинга есть записи типа 1, 1, 1k, 1 *, 1+, 2, 2, 2+, 3,3,3 * и т.д.Я могу рассматривать все эти записи как '1', 2 и 3 соответственно в одном и том же SQL-выражении?

1 Ответ

2 голосов
/ 24 ноября 2011

Попробуйте:

SELECT x.*
  FROM (SELECT t.*,
               CASE 
                 WHEN @rating != t.rating THEN @rownum := 1
                 ELSE @rownum := @rownum + 1 
               END AS rank,
               @rating := t.rating AS var_rating
          FROM offers t
          JOIN (SELECT @rownum := NULL, @rating := '') r
         WHERE code = 'ABC'
      ORDER BY t.rating, price) x
 WHERE x.rank <= 10

Изменения:

  • Добавлено предложение WHERE после предложения JOIN
  • Добавлено priceк пункту ORDER BY.
...