私は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;