ホームページ >バックエンド開発 >PHPチュートリアル >mysqlにはrow_number関数がありますか?
mysql には row_number 関数がありますか?
mysql には row_number 関数がありません。
row_number 関数は、Oracle などのデータベースで便利に使用でき、グループ化してグループ内の特定のデータを取得する機能を実現できます。しかし、MySQL には同様の機能が導入されていません。この機能を実現するには、特別な処理が必要です。
row_number 関数
関数は、グループ内のグループ化されたデータに番号を付けます。その効果は次のとおりです:
新しい列番号が追加されるため、グループ内の並べ替えと組み合わせて、グループ内の特定のデータを簡単に選択できます。
MySQL で使用される知識
case ステートメント
ユーザー変数
実装手順
各行にシリアル番号を追加する実装
SET @row_number = 0; SELECT (@row_number:=@row_number + 1) AS num, s.id, s.name, s.age FROM student s;
ここでユーザー変数を使用してデータを自動インクリメントします
グループ番号
SET @row_number=0, @customer_no=0; SELECT @row_number:=CASE WHEN @customer_no = s.age THEN @row_number + 1 ELSE 1 END AS num, @customer_no:=s.age AS stu_age, s.id, s.name FROM student s ORDER BY s.age;
customer_no は一時変数であり、クエリごとに年齢が割り当てられます。この場合の判定条件は、customer_no に値が代入される前であり、実際には、現在の行の年齢値が前行の年齢値と同じかどうかを判定します。異なる場合は番号を振り直す(出力1)ことで、連番をグループ化する機能を実現する。効果は Oracle の row_number 関数と同じです。
ユーザー変数の代入テクニック
ユーザー変数の代入を別の方法で置き換えることができます
SELECT @row_number:=CASE WHEN @customer_no = s.age THEN @row_number + 1 ELSE 1 END AS num, @customer_no:=s.age AS stu_age, s.id, s.name FROM student s, (SELECT @row_number:=0, @customer_no:=0) AS t ORDER BY s.age;
ここに代入を配置しますselect ステートメントの場合、効果は同じです。
関連知識の詳細については、PHP 中国語 Web サイト をご覧ください。 !