ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
max とは
max(マックス)はプログラミング言語や SQL に存在する基本関数で、与えられた値のうち最大のものを返します。同名・近い名前の関数が複数のレイヤで存在するため、文脈に応じて使い分けます。
| レイヤ | 典型シグネチャ | 用途 |
|---|---|---|
| 2引数 max | max(a, b) | 2 値のうち大きい方 |
| 可変長 max | max(a, b, c, ...) | 3 つ以上の最大 |
| コレクション max | max(list) | 配列・リスト内の最大 |
| 集約 MAX | SELECT MAX(col) FROM t | SQL の集約関数(列方向の最大) |
| 行内 GREATEST | GREATEST(a, b, c) | SQL の行内(横方向)最大 |
Java の max
// Math.max (2引数のみ。プリミティブ型用)
int a = Math.max(3, 5); // 5
double d = Math.max(1.2, 3.4); // 3.4
long l = Math.max(100L, 200L); // 200
// 3 つ以上は入れ子
int max3 = Math.max(Math.max(a, b), c);
int max4 = Math.max(Math.max(a, b), Math.max(c, d));
// Collections.max(List 等のコレクション全体)
List<Integer> list = List.of(3, 1, 4, 1, 5, 9, 2, 6);
int max = Collections.max(list); // 9
// Stream で複雑な比較
Optional<Person> oldest = people.stream()
.max(Comparator.comparingInt(Person::getAge));
Optional<Integer> maxI = list.stream().max(Comparator.naturalOrder());
int maxPrimitive = list.stream().mapToInt(Integer::intValue).max().orElse(0);
// IntStream.max (プリミティブ版)
int maxArr = IntStream.of(1, 2, 3, 4, 5).max().orElse(0);
JavaScript の max
// 2引数以上
Math.max(1, 2, 3); // 3
Math.max(-5, 0, 5); // 5
// 配列はスプレッド構文で渡す
const arr = [3, 1, 4, 1, 5, 9, 2, 6];
Math.max(...arr); // 9
// 引数なし → -Infinity(!)
Math.max(); // -Infinity
// 大きな配列はスタック溢れに注意(10万件超で危険)
Math.max.apply(null, hugeArray); // 同じく危険
// 巨大配列は reduce 推奨
const max = hugeArray.reduce((m, v) => v > m ? v : m, -Infinity);
// オブジェクト配列の特定キーで最大
const oldest = users.reduce((a, b) => a.age > b.age ? a : b);
// NaN が含まれる場合
Math.max(1, NaN, 3); // NaN(伝播)
Python の max
# 2引数以上
max(1, 2, 3) # 3
max(-5, 0, 5) # 5
# イテラブル(リスト・タプル・set)
max([3, 1, 4, 1, 5, 9, 2, 6]) # 9
max((1, 2, 3)) # 3
max({3, 1, 4}) # 4
# キー指定(複雑な比較)
users = [{'name': 'A', 'age': 25}, {'name': 'B', 'age': 30}]
oldest = max(users, key=lambda u: u['age']) # {'name': 'B', 'age': 30}
# 文字列は辞書順
max(['banana', 'apple', 'cherry']) # 'cherry'
max('hello') # 'o'
# 空イテラブル → ValueError、default 指定で回避
max([], default=0) # 0
# 同値時は最初の要素が返る
max([(1, 'a'), (1, 'b')], key=lambda x: x[0]) # (1, 'a')
SQL の MAX
SQL の MAX() は集約関数で、列方向(縦方向)の最大値を求めます:
-- 全行から最大
SELECT MAX(price) FROM products;
SELECT MAX(created_at) FROM orders; -- 最新の日付
-- グループごとの最大
SELECT category_id, MAX(price) AS max_price
FROM products
GROUP BY category_id;
-- HAVING で MAX を条件に
SELECT user_id, MAX(score) AS top_score
FROM games
GROUP BY user_id
HAVING MAX(score) >= 1000;
-- 文字列の MAX は辞書順(ASCII / UTF-8)
SELECT MAX(name) FROM users;
GREATEST(行内・横方向の最大)
-- 同じ行内の複数列から最大
-- 例: 3教科のテスト点数のうち最高
SELECT user_id,
GREATEST(math, english, science) AS best_score
FROM scores;
-- NULL の扱いに注意(MySQL/Oracle は NULL 含むと結果も NULL)
SELECT GREATEST(1, NULL, 3); -- NULL
SELECT GREATEST(COALESCE(math, 0),
COALESCE(english, 0),
COALESCE(science, 0)) AS best_score
FROM scores;
-- 反対は LEAST(最小)
SELECT LEAST(math, english, science) FROM scores;
言語別 max クイック比較
| 言語 | 2 引数 | 可変長 | コレクション |
|---|---|---|---|
| Java | Math.max(a, b) | 不可(入れ子で代用) | Collections.max(list) / stream().max() |
| JavaScript | Math.max(a, b) | Math.max(a, b, c) | Math.max(...arr) |
| Python | max(a, b) | max(a, b, c) | max(list) |
| C++ | std::max(a, b) | std::max({a,b,c}) | *std::max_element(v.begin(), v.end()) |
| SQL | GREATEST(a, b) | GREATEST(a, b, c) | MAX(col) 集約 |
| Go | Go 1.21+ max(a, b) | max(a, b, c) | 自前 reduce |
パフォーマンスの注意
- SQL
MAX(col)は該当列に INDEX があれば O(log n)、無ければ O(n) のフルスキャン - JavaScript
Math.max(...hugeArray)は10 万要素くらいでスタック溢れのリスク。reduce 推奨 - Java の Stream
.max(comparator)は内部的に逐次比較で O(n)。並列ストリームで分割可能 - Python の
max(list, key=fn)は fn が要素ごとに 1 回だけ呼ばれる(メモ化不要)
FAQ
Q: NULL / NaN / undefined を含む場合の動作は?
A: 言語ごとに異なります。JavaScript Math.max(1, NaN) は NaN、Python max([1, float('nan')]) は環境依存、SQL MAX は NULL を無視して集約。仕様を確認してから使うこと。
Q: SQL で各カテゴリの最高価格商品を 1 つ取りたい
A: MAX(price) だけだと商品名が取れません。ROW_NUMBER() OVER (PARTITION BY category ORDER BY price DESC) = 1 や、相関サブクエリ、JOIN を使います。
Q: max と Math.max の違いは(JavaScript)?
A: JavaScript には素の max 関数はなく、必ず Math.max を経由します。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?