/ / MySQL - функция за класиране вътре, където клауза - mysql, sql, rank

MySQL - ранг функция вътре, където клауза - mysql, sql, ранг

Искам да използвам функцията ранг в моя MySQL заявка. Използвах съвети от Функция за ранг в MySQL

Искам да избера само един ред с най-висок ранг. Моята заявка изглежда така:

SELECT c1, c2, c3, @curRank := @curRank + 1 AS rank
FROM tab1 t, (SELECT @curRank := 0) r
WHERE t.c5 = "asd" AND t.c6 = "qwe" AND rank = 1
ORDER BY t.c8 DESC

Получавам следната грешка:

ERROR 1054 (42S22): Unknown column "rank" in "where clause"

Какво правя погрешно? Как мога да поправя заявката си?

Отговори:

3 за отговор № 1

Не можете да използвате ALIAS което се генерира на същото ниво като WHERE клауза, можете да я увийте с подзапитване. Например,

SELECT *
FROM
(
SELECT c1, c2, c3, @curRank := @curRank + 1 AS rank
FROM tab1 t, (SELECT @curRank := 0) r
WHERE t.c5 = "asd" AND t.c6 = "qwe"
ORDER BY t.c8 DESC
) a
WHERE rank = 1

SQL Поръчката на операция е както следва:

  • FROM клауза
  • Клауза WHERE
  • GROUP BY клауза
  • С клауза
  • Клауза SELECT
  • Поръчка по клауза

Най- ALIAS е създаден на SELECT клауза, така че все още не е достъпна на WHERE клауза.