質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

23164閲覧

Mysqlのsort byで指定したカラムで同じ値があった場合の並び規則

annderber

総合スコア98

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/10/10 02:27

お世話になります。

Mysqlでのsort byのロジックについて質問させてください。
sort by code asc と指定した場合でcodeフィールドに同じ値が入っている場合、
同じ値はどのようなロジックで並び方が決定するのでしょうか。

例えば、同値のcodeを持つ複数レコードを同じselect文でselectすれば、毎回同じ並びで出力出来ますが、一度テーブルを空にして再度同じレコード(並びも)をinsertした後に同じselect文を使うと入れ替える前とは違う並びで出力されます。これはなぜでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

並びを指定した結果が同位であれば、その並びがどうなるかは不定です。
仮に法則性があったとしても保証されるものではありません。

内部的には作成順とか管理キー順を行っているかもしれませんが、DBMSの仕様が変わると、並びが変わる事になるから、当てにするべきではありません。

一応リファレンスにはソートのアルゴリズムについて解説があります。
8.2.1.15 ORDER BY の最適化

投稿2018/10/10 02:35

編集2018/10/10 03:01
sazi

総合スコア25426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2018/10/25 02:07

遅くなりましたが、コメントありがとうございます。 並び順をしっかり定めたい場合は当然ソート処理を入れるべきなのですが、 指定しない場合はどのような動作をするのかという疑問があり質問した次第です。 内部的にどうなってるかまでは分からないですよね
sazi

2018/10/25 02:13

>内部的にどうなってるかまでは分からないですよね リンク先には内部的なアルゴリズムについて記述があります。
annderber

2018/10/25 02:20

提示いただいたリンク先の情報はソートを指定した場合のアルゴリズムということですよね。 指定しなかった場合のロジックも書いてあるのでしょうか。
sazi

2018/10/25 02:33 編集

どちらかというと、データ処理についてソートがどのように関与しているかというような記述なので、 ソートの指定が無かった場合に、その手順が処理されないという風に解釈すれば良いかと思います。 ソートの指定が無い場合、結果的にはランダムになる、と解釈しましたが。 ※ここで言うランダムは並びを意識していないという意味です。結果的に並んでいるような場合も含みます。
annderber

2018/10/25 02:35

そのような解釈で問題なさそうですね。 ありがとうございます。
guest

0

順番を確保したいのであれば確定するまでカラムを多重でソートすることです

SQL

1select * from tbl order by code asc,val1 asc,val2 asc,・・・

投稿2018/10/10 03:55

yambejp

総合スコア117632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2018/10/25 02:10 編集

遅くなりましたがコメントありがとうございます。 今回はソートを指定しない場合にmysqlがどのようなロジックで並び順を決定しているのかの質問でした。 並び順を確定したいのであれば、sort byでしっかり指定すべきだと私も思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問