Искам да използвам функцията ранг в моя 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
клауза.