[解決済み】グループ化されたSQL結果の各グループで最大値を持つレコードを取得する
質問
グループ化された各セットの最大値を含む行はどのように取得するのですか?
この質問に対する複雑すぎるバリエーションをいくつか見ましたが、良い答えのものはありませんでした。そこで、できるだけシンプルな例を挙げてみました。
下のような表で、人、グループ、年齢の列がある場合、各グループの最年長者はどのように求めるか?(グループ内で同数の場合、アルファベット順の最初の結果が得られるはずです。)
Person | Group | Age
---
Bob | 1 | 32
Jill | 1 | 34
Shawn| 1 | 42
Jake | 2 | 29
Paul | 2 | 36
Laura| 2 | 39
希望する結果セット。
Shawn | 1 | 42
Laura | 2 | 39
解決方法は?
mysqlで超簡単にできる方法があります。
select *
from (select * from mytable order by `Group`, age desc, Person) x
group by `Group`
これは、mysqlでは以下のように許可されているためです。 ではなく グループバイカラムでないカラムを集約する場合、mysql は単に 最初 の行になります。解決策は、まず各グループで必要な行が最初に来るようにデータを並べ、次に値が必要な列でグループ化することです。
を探そうとする複雑なサブクエリを避けることができます。
max()
また、同じ最大値を持つ行が複数ある場合、複数の行を返してしまうという問題もあります (他の回答がそうであるように)。
注 これは mysql専用 を解決することができます。私が知っている他のすべてのデータベースは、"non aggregated columns are not listed in group by clause"などのメッセージでSQL構文エラーを投げつけます。このソリューションでは 文書化されていない の動作を保証するためのテストを含めるとよいでしょう。 残る は、MySQL の将来のバージョンでこの動作が変更された場合にも動作します。
バージョン5.7に更新しました。
バージョン5.7以降では
sql-mode
の設定には
ONLY_FULL_GROUP_BY
をデフォルトで使用するため、この機能を実現するためには
ではなく
にはこのオプションがあります(サーバーのオプションファイルを編集して、この設定を削除してください)。
関連
-
[解決済み】mysql 外部キー制約が不正に形成されているエラー
-
[解決済み] MySQLで週単位でグループ化する方法は?
-
[解決済み] MYSQLのTIMESTAMP比較
-
[解決済み] エラーコードです。1215. 外部キー制約を追加できません (外部キー)
-
[解決済み] DateTime 日付と時間によるグループ化
-
[解決済み] MYSQLでMAX(列の値)、PARTITIONで別の列で行を選択するにはどうすればよいですか?
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] グループ化された結果の各グループの上位nレコードを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】1052:フィールドリストの列「id」が曖昧である
-
[解決済み】カラムのデータが切り捨てられた?
-
[解決済み】MySQL 派生テーブルはすべて独自のエイリアスを持つ必要があります。
-
[解決済み】MySQLを使用してランダムでユニークな8文字の文字列を生成する方法
-
[解決済み】MySQLで日付を比較する
-
[解決済み] MySQLで「一意のテーブル/エイリアスでない」場合
-
[解決済み] 1030 ストレージエンジンからエラー28が発生しました
-
[解決済み] MySQL エラー: キーの長さがないキー指定
-
[解決済み] SQLZOO - select from world チュートリアル #13
-
[解決済み] MySQL でネストされたトランザクションは可能ですか?