MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで最大値から最小値へ並べ替える方法

MySQLで最大値から最小値へ並べ替える方法

MySQLでデータを大きい順(降順)に並べ替えるには、ORDER BY句を使用します。特に注意が必要なのは、数値が文字列型(VARCHAR)として保存されている場合です。そのまま並べ替えると文字列として比較されるため、意図しない順序になることがあります。このようなケースでは、length()関数を組み合わせると正しくソートできます。

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
-> (
-> Price varchar(20)
-> );
Query OK, 0 rows affected (0.92 sec)

次に、INSERTコマンドを使ってレコードを挿入します。

mysql> insert into DemoTable values('80');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('800');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('108');
Query OK, 1 row affected (0.50 sec)
mysql> insert into DemoTable values('765');
Query OK, 1 row affected (0.14 sec)

SELECT文ですべてのレコードを確認してみましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+-------+
| Price |
+-------+
| 80 |
| 800 |
| 108 |
| 765 |
+-------+
4 rows in set (0.00 sec)

最大値から最小値へ並べ替えるクエリ

ここで、最大値から最小値へ並べ替えるクエリを見てみましょう。Priceカラムはvarchar型のため、単純なORDER BYだけでは「80」「800」のような文字列比較になってしまいます。そこで、まずlength()関数で桁数の多い順に並べ、その後Priceの降順でソートすることで、数値として正しい順序を実現しています。

mysql> select *from DemoTable
-> order by length(Price) DESC,Price DESC;

実行結果は以下のとおりです。

+-------+
| Price |
+-------+
| 800 |
| 765 |
| 108 |
| 80 |
+-------+
4 rows in set (0.00 sec)

補足:CASTを使った別の方法

より確実に数値として並べ替えたい場合は、CAST()関数で文字列を数値型に変換する方法も有効です。

mysql> select *from DemoTable
-> order by CAST(Price AS UNSIGNED) DESC;

この方法でも同じ結果が得られます。カラムの型設計を見直せるのであれば、そもそも数値をINT型などで保存しておくのが最もシンプルで安全な解決策です。

  1. C++で部分配列の「最大値+最小値」の合計が最小になる値を求める方法

    問題の概要n個の正の整数からなる配列が与えられたとき、サイズが2以上の部分配列の中で、「部分配列の最大値 + 最小値」の合計が最小になる値を求めるのがこの問題です。例たとえば、配列が arr[] = {10, 5, 15, 7, 2, 1, 3} の場合、「2 + 1」を加算したときの「最大値 + 最小値」の合計は 3 となり、これが求める最小値です。アルゴリズム部分配列に要素を追加しても、「最大値 + 最小値」の合計がより小さくなることはありません。配列の最大値は、要素を追加しても決して減少しません。より大きな要素を追加した場合にのみ増加します。そのため、長さ2の部分配列だけを考えるのが常に

  2. C#でDateTime型の最大値を取得する方法|MaxValueプロパティの使い方

    C#で日付(DateTime)の最大値を設定・取得するには、DateTime構造体が持つMaxValueプロパティを使用します。DateTime max = DateTime.MaxValue;MaxValueプロパティは、DateTime型で表現できる最も遅い日時である「9999年12月31日 23:59:59」を返します。以下のように、取得した値をコンソールに出力することで、日付の最大値を確認できます。サンプルコードusing System; using System.Linq; public class Demo {    public static void Ma