/ / SQL ROW_NUMBERはエラーを返します - mysql、sql、sql-order-by、rank、row-number

SQL ROW_NUMBERはエラーを返します - mysql、sql、sql-order-by、rank、row-number

私はMySQLで行を注文し、その順序に従って各行に番号を割り当てる必要があります。 ORDER BY 意図したとおりに動作していますが ROW_NUMBER().

これは動作します:

USE my_database;
SELECT
id
,volume
FROM my_table
ORDER BY volume;

これは動作しません:

USE my_database;
SELECT
id
,volume
,ROW_NUMBER() over(ORDER BY volume)
FROM my_table
ORDER BY volume;

私はこのエラーメッセージが表示されます:

SELECT id、volume、ROW_NUMBER()以上(ORDER BYボリューム)FROM my_table ORDER BYボリュームエラーコード:1064. SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が "(ORDER BY volume)FROM my_table ORDER BY vol"の4行目の0.000秒近くで使用するようにしてください

私は間違って何をしているのですか?それをどうすればいいのですか?

私もやった RANK() そして DENSE_RANK() これは同じ問題をもたらす。

回答:

回答№1は0

そのようなものはありません ROW_NUMBER() または RANK() MySQLで。以下を試してください:

USE my_database;
SET @row_number = 0;
SELECT id
, volume
, @rownumber := @rownumber + 1 AS rank
FROM my_table
ORDER BY volume;

回答№2の場合は0

関数ROW_NUMBER()はMySQLには存在しません。

しかし、あなたはそれを複製することができます: http://www.mysqltutorial.org/mysql-row_number/

row_numberは、次のようなランキング関数です。連続番号を返す 行の最初の行の1から始まります。私たちはしばしば row_number関数を使用して、必要なレポートを作成します。 残念ながら、MySQLはMicrosoft SQLのようなrow_numberを提供しません サーバーとOracleしかし、MySQLでは、セッション変数を使用して row_number関数をエミュレートします。

例:

SET @row_number = 0;

SELECT
(@row_number:=@row_number + 1) AS num, firstName, lastName
FROM
employees
LIMIT 5;