• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの書き方)

効果的なSQLコードの書き方とは?

このQ&Aのポイント
  • SQLを使用してテーブルのデータを取得する際、効果的なコードの書き方が重要です。
  • この質問では、T1テーブルとT2テーブルからデータを取得し、指定された形式で結果を表示したいという要望があります。
  • どのようにSQLコードを書けば目的の結果が得られるのか、解説します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

今手元にOracle環境がないため間違っていたらスイマセン。 SELECT A.NO ,A.NAME ,SUM(B.TEN) SUMTEN FROM T1 A, T2 B WHERE A.NO = B.NO GROUP BY A.NO, A.NAME ORDER BY SUMTEN DESC COUNT関数ではなくSUM関数でないとダメだと思います。 また、T1とT2も等価結合して下さい。 自信がないのが「ORDER BY」の所ですが列別名でやっていますがダメかも。「3」で大丈夫かも。 もしダメならセンス0な感じですが強引にインラインビューを用いて SELECT NO ,NAME ,SUMTEN FROM (SELECT A.NO ,A.NAME ,SUM(B.TEN) SUMTEN FROM T1 A, T2 B WHERE A.NO = B.NO ) GROUP BY NO, NAME ORDER BY SUMTEN DESC こんな感じで。。。(ここまでする必要ないよなぁ)

bazax
質問者

お礼

感謝します。 SELECT A.NO ,A.NAME ,SUM(B.TEN) SUMTEN FROM T1 A, T2 B WHERE A.NO = B.NO GROUP BY A.NO, A.NAME ORDER BY SUMTEN DESC でうまくいきました。 結果 NO | NAME | TEN ---+------+----- 3 + 上村 + 40 1 + 吉田 + 11 2 + 浅野 + 6

その他の回答 (2)

回答No.2

select A.NO, A.NAME, count(B.TEN) from T1 A inner join T2 B on A.NO = B.NO group by A.NO, A.NAME order by count(B.TEN) desc とすればいいと思います。

bazax
質問者

お礼

回答ありがとうございます。 onのあたりでエラーになりました。

  • jhayashi
  • ベストアンサー率29% (535/1843)
回答No.1

select A.NO, A.NAME, sum(B.TEN) FROM T1 A, T2 B GROUP BY A.NO, A.NAME ORDER BY 3 DESC かな sum関数と グループ化の部分を確認してください。

bazax
質問者

お礼

回答ありがとうございます。 結果はすべて57になってしまいました。(すべての和) NO | NAME | TEN ---+------+----- 1 + 吉田 + 57 2 + 浅野 + 57 3 + 上村 + 57 CREATE TABLE T1 ( NO VARCHAR2(10), NAME VARCHAR2(20) ); CREATE TABLE T2 ( NO VARCHAR2(10), TEN NUMBER(4,1) ); insert into T1 (NO, NAME) values ('1', '吉田'); insert into T1 (NO, NAME) values ('2', '浅野'); insert into T1 (NO, NAME) values ('3', '上村'); insert into T2 (NO, TEN) values ('1', 10); insert into T2 (NO, TEN) values ('2', 5); insert into T2 (NO, TEN) values ('3', 0); insert into T2 (NO, TEN) values ('1', 1); insert into T2 (NO, TEN) values ('2', 1); insert into T2 (NO, TEN) values ('3', 40);

関連するQ&A