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型などで保存しておくのが最もシンプルで安全な解決策です。
-
C++で部分配列の「最大値+最小値」の合計が最小になる値を求める方法
問題の概要n個の正の整数からなる配列が与えられたとき、サイズが2以上の部分配列の中で、「部分配列の最大値 + 最小値」の合計が最小になる値を求めるのがこの問題です。例たとえば、配列が arr[] = {10, 5, 15, 7, 2, 1, 3} の場合、「2 + 1」を加算したときの「最大値 + 最小値」の合計は 3 となり、これが求める最小値です。アルゴリズム部分配列に要素を追加しても、「最大値 + 最小値」の合計がより小さくなることはありません。配列の最大値は、要素を追加しても決して減少しません。より大きな要素を追加した場合にのみ増加します。そのため、長さ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