私は私のMySQLのクエリでランク関数を使用したい。私は MySQLのランク関数
最高ランクの行を1つだけ選択したいと考えています。私の質問は次のようになります:
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"
私は間違って何をしていますか?どのように私のクエリを修正することができますか?
回答:
回答№1の場合は3あなたは 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句
- HAVING句
- SELECT句
- ORDER BY句
ザ ALIAS
に作成されます SELECT
句ではまだアクセスできません WHERE
句。