SQL文をご教授願います。
以下のようなテーブルを仮定しています。
A B C D
----------------------
10 100 1203 A
10 200 1204 B <--- 取得したい
11 300 1203 C
11 300 1204 D <---
12 400 1206 D
12 500 1207 E <---
・
・
A列をー意にして、A列・D列のデータを取得したい
条件
Bの大きい方を取得する
Bの値が同じ場合はCの大きい方を取得する。
(A列には同じデータが2以上あるとします)
(C列には同じデータはありません)
欲しい結果
A D
--------
10 B
11 D
12 E
No.3
- 回答日時:
GROUP BYを使った時はGROUPにした列と集計関数しか使えないので
単純に考えると
第一段階
AをGROUPにしてBの最大(MB)を求める
第二段階
AとMBをGROUPにしてCの最大(MC)を求める
第三段階
A・MB・MCがそれぞれA・B・Cである行を求める
となるような気がします。
CREATE VIEW FIRST AS
SELECT A,MAX(B) AS MB FROM TABLE GROUP BY A
CREATE VIEW SECOND AS
SELECT TABLE.A, MB ,MAX(TABLE.C) AS MC
FROM TABLE,FIRST
WHERE TABLE.A = FIRST.A AND TABLE.B = MB
SELECT TABLE.A,TABLE.D FROM TABLE,SECOND
WHERE TABLE.A = SECOND.A
AND TABLE.B = MB
AND TABLE.C = MC
私はこんなふうに考えてしまいます。
No.2
- 回答日時:
元のテーブル名を「T_DATA」と勝手に決めましたが、
以下のSQLで目的のデータが取れました。
SELECT T_DATA.A, T_DATA.D FROM T_DATA INNER JOIN
(SELECT A AS MAX_A, MAX(B) AS MAX_B, MAX(C) AS MAX_C FROM T_DATA GROUP BY A) AS T_MAX
ON T_DATA.A = T_MAX.MAX_A AND T_DATA.B = T_MAX.MAX_B AND T_DATA.C = T_MAX.MAX_C
「同一のAの中で、Bが大きいか、Bが同じならCが大きいもの」を
まず先に探しています(カッコ内のサブクエリ)。
本当ならここでそのときのDの値もほしいところですが、
GROUP BYを使ったときは、そのGROUP BYを行った項目か、
それ以外の項目なら集合関数をかませなければならないので
この時点でDを取得することはできません。
そこでそれをサブクエリにし、元のテーブルと結合させて
AとBとCの値を条件にしてDを取っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) 【画像あり】A1が●+B1と同じ文字がB列にある+C1と同じ文字がC列にある場合D1に〇を付ける 3 2023/03/09 18:18
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
SQLで列名を変数にできないでし...
-
列のヘッダーを含めるのをデフ...
-
UPDATE文のWHERE条件に他のテー...
-
【VB.NET】日付型の列にNULLを...
-
項目名に大文字と小文字の混在...
-
SQLによる"あいうえお"順でソー...
-
テーブル列数とデータファイル...
-
Accessのリストボックスについて
-
特定の列だけをGROUP BYしたい時
-
複数列の最大値を求めたい
-
SQLでn番目からm番目を取得したい
-
”+”の符号をつける方法
-
accessで複合キーの処理が遅い
-
列番号による項目の取得について
-
ストアドプロシージャに複数のS...
-
DB2のSQL
-
v$processのPROGRAM列に関する質問
-
Access:クエリーにて集計後に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
列のヘッダーを含めるのをデフ...
-
SQLで列名を変数にできないでし...
-
Access:クエリーにて集計後に...
-
列番号による項目の取得について
-
UPDATE文のWHERE条件に他のテー...
-
【VB.NET】日付型の列にNULLを...
-
テーブル列数とデータファイル...
-
特定の列だけをGROUP BYしたい時
-
伝票番号、品番、在庫としてマ...
-
SQLについて質問です。 Aという...
-
SQLによる"あいうえお"順でソー...
-
項目名に大文字と小文字の混在...
-
SQLについて質問です。 テーブ...
-
複数列の最大値を求めたい
-
SQLについて質問です。 テーブ...
-
v$processのPROGRAM列に関する質問
-
Accessでの全データから空白削除
-
特定の文字列で列を区切るには?
おすすめ情報