アプリ版:「スタンプのみでお礼する」機能のリリースについて

クラス 身長 名前 クラブ
1組  160㎝ A サッカー
1組  170㎝ B 野球
1組  180㎝ C テニス

2組  175㎝ D ソフトボール
2組  155㎝ E 陸上
2組  190㎝ F 水泳

3組  140㎝ G 空手
3組  185㎝ H アーチェリー
3組  165㎝ I 弓道

上記の表があるとします。
各クラスごとに一番身長の高い人の クラス 身長 名前 クラブを表示するSQL文を「FROM句に副問合せ」を用いて書きたいのですが、うまくいきません
出力結果としては

クラス  最高身長  名前  クラブ
1組    180㎝   C   テニス
2組    190㎝   F   水泳
3組    185㎝   H   アーチェリー

としたいのです。

select クラス, 身長, 名前, クラブ
from 学年
where 身長=(select max(身長) from 学年);
ここからクラスごとにするにはどうすればいいでしょうか?
よろしくお願いします。

質問者からの補足コメント

  • From句に問合せは指定されているので必要です。
    ということは
    select クラス,身長,名前,クラブ
    from 学年
    Inner join (select クラス,max(身長) as max身長 from 学年 group by クラス
    でいいですか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/06/01 20:37

A 回答 (3件)

inner JOIN するなら


・副問合せに「名前」を付ける
・join元のどの列がjoin先のどの列と結びつくのか、 on で指定する
の2点が抜けています。

SQLの参考書で 結合(JOIN)のところをよくみましょう。


で、普通は from句というと from XXX の部分だけで、 JOIN 含めないと思います。

「FROM句に副問合せ」だと、
from (select 〜 )
みたいなことを言ってるのだと思いますが、いかがでしょうか
    • good
    • 0

[FROM句に副問合せ]


は必須なのでしょうか?

お使いのシステムが対応しているのなら、 max() over () を使って、「クラスでmax」の値を得られ、
クラス 身長 名前 クラブ クラスのMAX身長
という列が得られる問い合わせが書けます。

これを 副問い合わせにし fromにして、 身長= クラスのMAX身長 の行だけ抜き出せば、目的のデータが得られます。



私なら、(select クラス,max(身長) as max身長 from 学年 group by クラス) と 学年 テーブルを inner join します。
この回答への補足あり
    • good
    • 0

私なら以下のように記述します。



SELECT クラス, 身長, 名前, クラブ
FROM 学年
WHERE 身長 IN(SELECT MAX(身長) FROM 学年 GROUP BY クラス);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!