ホームページ >データベース >mysql チュートリアル >Different、row_number()、over() の違いの詳細な説明
この記事では主に、SQL におけるDifferent、row_number()、over() の違いの詳細な説明 と row_number() over() の違いと関連する使用法情報を紹介します。場合によっては、同じフィールドに同じ名前のレコードを 1 つだけ表示する必要があるなど、不快な問題が発生することがあります。実際には、データベースには同じ名前の複数のレコードが含まれている可能性があるため、複数のレコードを取得して表示する場合、それは私たちの本来の意図に反します!そこで、このような事態を避けるために「重複除去」処理を行う必要があります。端的に言えば、同じフィールド内の同じ内容のレコードは 1 つのレコードしか表示されないということです。
それでは、「重複削除」機能を実装するにはどうすればよいでしょうか?この点に関して、この機能を実現するには 2 つの方法があります。 1 つ目の方法は、select ステートメントを作成するときに unique キーワードを追加することです。 2 つ目の方法は、select ステートメントを作成するときに row_number() over()
関数を呼び出すことです。
上記の 2 つの方法はどちらも「重複削除」機能を実現できますが、この 2 つの類似点と相違点は何ですか?次に、著者が詳細な手順を説明します。
2 uniqueSQLでは、キーワードDifferent、row_number()、over() の違いの詳細な説明は一意に異なる値を返すために使用されます。構文形式は次のとおりです:
SELECT DISTINCT 列名称 FROM 表名称NAME と AGE の 2 つのフィールドを含むテーブル "Different、row_number()、over() の違いの詳細な説明" があるとします。具体的な形式は次のとおりです。
上記のテーブルを観察すると、次のことがわかります。 : NAME が同じです 同じ AGE のレコードが 2 件、レコードが 3 件あります。次の SQL ステートメントを実行すると、
/** * 其中 PPPRDER 为 Schema 的名字,即表 Different、row_number()、over() の違いの詳細な説明 在 PPPRDER 中 */ select Different、row_number()、over() の違いの詳細な説明 from PPPRDER.Different、row_number()、over() の違いの詳細な説明
は次の結果を取得します:
結果を観察すると、上記の 4 つのレコードの中に、同じ NAME 値を持つ 2 つのレコードがあることがわかります。レコード 2 と 3 は両方とも値「gavin」を持ちます。では、同じ名前のレコードを 1 つだけ表示したい場合はどうすればよいでしょうか?現時点では、Different、row_number()、over() の違いの詳細な説明 キーワードを使用する必要があります。次に、次の SQL ステートメントを実行します。
select Different、row_number()、over() の違いの詳細な説明 Different、row_number()、over() の違いの詳細な説明 from PPPRDER.Different、row_number()、over() の違いの詳細な説明
は次の結果を取得します:
結果を観察してください。明らかに要件が達成されています。ただし、Different、row_number()、over() の違いの詳細な説明 キーワードが 2 つのフィールドに同時に適用された場合にどのような影響があるのか、疑問に思わずにはいられません。思いついたので、次の SQL ステートメントを実行してみましょう。
によって得られる結果は次のとおりです。 おっと、効果がないようです。彼女はすべての記録を見せてくれました!同じ NAME 値を持つレコードが 2 つあり、同じ AGE 値を持つレコードが 3 つあります。まったく変化はありません。しかし実際には、結果は次のようになります。 Different、row_number()、over() の違いの詳細な説明 が複数のフィールドに適用される場合、同じフィールド値を持つレコードのみが「重複排除」されるためです
明らかに、「貧弱な」4 つのレコードはこの条件を満たしていないため、Different、row_number()、over() の違いの詳細な説明 は上記の 4 つのレコードを考慮します。同じではありません。空話です。 次に、テーブル「Different、row_number()、over() の違いの詳細な説明」に同一のレコードを追加して検証してみます。レコードを追加した後のテーブルは次のとおりです。select Different、row_number()、over() の違いの詳細な説明 Different、row_number()、over() の違いの詳細な説明, age from PPPRDER.Different、row_number()、over() の違いの詳細な説明結果は次のとおりです。
上記の内容を完全に検証する結果を観察します。結論。
さらに、誰もが特別な注意を払う必要があることが 1 つあります。それは、キーワード unique は、SQL ステートメントのすべてのフィールドの先頭に配置されている場合にのみ機能します。それが間違って配置されている場合です。位置を指定すると、SQL はエラーを報告しませんが、影響はありません。
SQL Server データベースでは、データベース テーブル内のレコードにラベルを付けるための関数 row_number() が提供されており、使用する場合は関数 over() が続きます。 over() の機能は、テーブル内のレコードをグループ化して並べ替えることです。両方で使用される構文は次のとおりです:
select Different、row_number()、over() の違いの詳細な説明 Different、row_number()、over() の違いの詳細な説明, age from PPPRDER.Different、row_number()、over() の違いの詳細な説明
意味: テーブル内のレコードをフィールド COLUMN1 でグループ化し、フィールド COLUMN2 で並べ替えます。ここで、PARTITION BY: グループ化を意味します ORDER BY: 並べ替えを意味します
接下来,咱们还用表“Different、row_number()、over() の違いの詳細な説明”中的数据进行测试。首先,给出没有使用 row_number() over() Different、row_number()、over() の違いの詳細な説明时查询的结果,如下所示:
然后,运行如下 SQL 语句,
select PPPRDER.Different、row_number()、over() の違いの詳細な説明.*, row_number() over(partition by age order by Different、row_number()、over() の違いの詳細な説明 desc) from PPPRDER.Different、row_number()、over() の違いの詳細な説明
得到的结果如下所示:
从上面的结果可以看出,其在原表的基础上,多了一列标有数字排序的列。那么反过来分析咱们运行的 SQL 语句,发现其确实按字段 AGE 的值进行分组了,也按字段 NAME 的值进行排序啦!因此,Different、row_number()、over() の違いの詳細な説明的功能得到了验证。
接下来,咱们就研究如何用 row_number() over() Different、row_number()、over() の違いの詳細な説明实现“去重”的功能。通过观察上面的结果,咱们可以发现,如果以 NAME 分组,以 AGE 排序,然后再取每组的第一个记录或许就可以实现“去重”的功能啊!那么试试看,运行如下 SQL 语句,
/* * 其中 Different、row_number()、over() の違いの詳細な説明 表示最后添加的那一列 */ select * from (select PPPRDER.Different、row_number()、over() の違いの詳細な説明.*, row_number() over(partition by Different、row_number()、over() の違いの詳細な説明 order by age desc) Different、row_number()、over() の違いの詳細な説明 from PPPRDER.Different、row_number()、over() の違いの詳細な説明) where Different、row_number()、over() の違いの詳細な説明 = 1
运行后,得到的结果如下所示:
观察以上的结果,我们发现,哎呀,数据“去重”的功能一不小心就被咱们实现了啊!不过很遗憾,如果咱们细心的话,会发现一个很不爽的事情,那就是在执行以上 SQL 语句进行“去重”的时候,有一条 NAME 值为“gavin”、AGE 值为“18”的记录被过滤掉了,但是在现实生活会中,同名不同年龄的事情太正常了。
4 总结
通过阅读及实践以上内容,咱们已经知道了,无论是用关键字 Different、row_number()、over() の違いの詳細な説明 还是用Different、row_number()、over() の違いの詳細な説明 row_number() over() 都可以实现数据“去重”的功能。但是在实现使用的过程中,咱们要特别注意两者的用法特点以及区别。
在使用关键字 Different、row_number()、over() の違いの詳細な説明 的时候,咱们要知道其作用于单个字段和多个字段的时候是有区别的,作用于单个字段时,其“去重”的是表中所有该字段值重复的数据;作用于多个字段的时候,其“去重”的表中所有字段(即 Different、row_number()、over() の違いの詳細な説明 具体作用的多个字段)值都相同的数据。
在使用Different、row_number()、over() の違いの詳細な説明 row_number() over() 的时候,其是按先分组排序后,再取出每组的第一条记录来进行“去重”的(在本篇博文中如此)。当然,在此处咱们还可以通过不同的限制条件来进行“去重”,具体如何实现,就需要大家自己去动脑思考啦!
最后,在本篇博文中,作者详述了自己对用关键字 Different、row_number()、over() の違いの詳細な説明 和Different、row_number()、over() の違いの詳細な説明 row_number() over() 进行数据“去重”的一些认识,希望以上的内容能够对大家有所帮助!
【相关推荐】
1. Mysql免费视频教程
2. 详解innodb_index_stats导入数据时 提示表主键冲突的错误
3. 实例详解 mysql中innodb_autoinc_lock_mode
以上がDifferent、row_number()、over() の違いの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。