ホームページ >バックエンド開発 >PHPチュートリアル >mysqlにはrow_number関数がありますか?

mysqlにはrow_number関数がありますか?

PHPz
PHPzオリジナル
2016-06-13 12:07:164847ブラウズ

mysqlにはrow_number関数がありますか?

mysql には row_number 関数がありますか?

mysql には row_number 関数がありません。

row_number 関数は、Oracle などのデータベースで便利に使用でき、グループ化してグループ内の特定のデータを取得する機能を実現できます。しかし、MySQL には同様の機能が導入されていません。この機能を実現するには、特別な処理が必要です。

row_number 関数

関数は、グループ内のグループ化されたデータに番号を付けます。その効果は次のとおりです:

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;

mysqlにはrow_number関数がありますか?

ここでユーザー変数を使用してデータを自動インクリメントします

  • グループ番号

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;

mysqlにはrow_number関数がありますか?

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 サイト をご覧ください。 !

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。