• ベストアンサー

SQL文について知恵をかしてください!

MarrowGの回答

  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

SELECT col2, MAX(col1), MAX(col4), col3, FROM tab01 WHERE col2 IN ('国語','算数','理科') GROUP BY col2, MAX(col1), MAX(col4) 出力されるカラムの順番が違いますがこれでお望みの出力が得られると思います。 後は出力側(帳票?)で調節すればよいでしょう。

chaff
質問者

お礼

舌足らずな説明にも関わらず、ご回答ありがとうございました。

関連するQ&A

  • こんなSQL文

    Oracle8.1.7を使用しております。 以下のようなテーブルに対し、1行目と2行目を削除するSQL文を書きたいのですが、思いつきません。どなたか、アドバイスいただけないでしょうか? 表名:A   B | C ――――――――   2 | 10   2 | 1   1 | 10   1 | 1   1 | 11   1 | 2   1 | 1   3 | 10   2 | 3 変数として、P1=1とP2=2があります。(これは、SQL文の中に直接書くものとします。) ここで、SELECT B,C FROM A WHERE B=1;とSELECT B,C FROM A WHERE B=2;を実行すると、次のようになります。   B | C     B | C ――――――――― ―――――――――   1 | 10    2 | 10   1 | 1     2 | 1   1 | 11    2 | 3   1 | 2   1 | 1 ここで、それぞれの表を見ると、Cの値が一致している部分があります。この一致していて、Bが2の行を削除したいのですが、SQL1文では無理でしょうか? 最近、SQLには慣れてきたつもりだったのですが、こんなとこでつまずくとは・・・どうぞよろしくお願いします。

  • <SQL>条件付きで最小値レコードを抽出する方法

    SQLite3.7.5を使っています。 以下<抽出前>の様なテーブルから、col2の値が"FALSE"で(col1=3,4,5の3つ)かつ、col3が最小値(col3=3)であるレコードを<抽出後>のように抽出するSQL文をご教示ください。 <抽出前> col1 | col2 | col3 1 | true | 3 2 | true | 0 3 |false | 3 4 |false | 5 5 |false | 3 <抽出後> col1 | col2 | col3 3 |false | 3 5 |false | 3 自分で考えたSQL文は以下です。 抽出結果は問題ないのですが、同じSELECT文を2回書いていてだいぶ効率悪いことをしているのではないかと思い質問しました。 よろしくお願い致します。 SELECT * FROM (SELECT * FROM test WHERE (col2 = false)) WHERE col3 = (SELECT min(col3) FROM (SELECT * FROM test WHERE (col2 = false)))

  • SQL(SELECT文)を教えてください

    SQL Serverを勉強中です。 以下のようなテーブルに、同一の日付に複数の名称・値のセットが存在します。 Date(日付)  Name(名称) Value(値) 20130101      a      10 20130101      b      20 20130101      c      30 20130202      a      5 20130202      b      10 20130202      c      15 このデータを、SQLのSELECT文で取得し、以下のような表を作りたいと考えています。 a b c 20130101 10 20 30 20130202 5 10 15 行が日付、列が名称になっています。 このように取得できるSQL文を教えてください。よろしくお願いします。

  • PHP+MySQLから結果セット取得後の計算方法

    PHP+MySQLから結果セット取得後の計算方法を教えてください。 イメージは以下になります。 以下、testtable とします。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 C 95 30 50 90 D 100 95 85 90 そこで、国語が80点以下の生徒を検索し、抽出した生徒の算数平均点数を導きたいのです。 //国語が80点以下の生徒を抽出 $sql="SELECT * from testtable WHERE 国語<=80"; $rst= mysql_query($sql); 上記で国語が80点以下の生徒を検索出来たと思うのです。 イメージは下記になります。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 算数の平均を求めるので、(80+60)/2の式を書きたいのです。 平均の2は、mysql_num_rows($rst)で導き出せるのですが、 (80+60)の部分がわかりません。 while ($col = mysql_fetch_array($rst)){ $sum=$sum+$col[算数];} $body.= "平均".$sum/mysql_num_rows($rst)."点"; でよいでしょうか。 ご教授願います。

    • ベストアンサー
    • MySQL
  • グループ内最大値に印を付けるSQL文

    MySQL5 に年度、通し番号が 格納されており、 select year, number from mytable ・・・と抽出すると以下のようになります。 2005 1 2005 2 2005 3 2008 4 2008 5 2008 6 2008 7 2008 8 2010 9 2011 10 2011 11 2011 112 同じ年度グループ内で、最大となる通し番号の行に「myFlg =1」と付けるSQL文をご教示ください。if とか group by とか as myFlg =1 みたいな記述をするのかなと想像するんですが・・・ PHP5のWHILE文でmyFlg = 1となっている行だけを出力し、上記データ例では、 while ($col = mysql_fetch_array($rst)) { if ($col['myFlg']) == '1') { echo $col['year'] . "年の最大番号は、" . $col['myFlg']. "番"; } } を実行することで、以下のような結果を得ることを期待しています。 2005年の最大番号は、3番 2008年の最大番号は、8番 2010年の最大番号は、9番 2011年の最大番号は、112番 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL文について

    テーブルにprice1とprice2のフィールドがあります。 単純に安い方から抽出するにはorder by price1でいいのですが price1は通常価格でprice2は特別価格とした場合price1は必ず値が ありますがprice2は任意のものだけ値があります。 price1はもちろんのことprice2は値があるものだけ扱いソートして 抽出するにはどのようなsql文を書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • SQL文 特定のレコードを抽出したい

    以下のようなテーブルAがあったとします。 年月日,項目B ---------------------- 20080101 100 20080102 100 20080103 200 20080104 400 20080105 400 20080106 200 SQL文にて、データの抽出を行いたいのですが、 抽出したいのは、データに変更があった年月日と項目Bの値です。 年月日,項目B ---------------------- 20080101 100 20080103 200 20080104 400 20080106 200 前の年月日と比較し、項目Bに違いがあった場合のデータだけ抽出したいのですが、SQL文で行うことは可能でしょうか?? 環境は、SQL Server 2005 です。

  • SQL文で

    SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB       2 い 3 CC 3 う 4 DD 4 え

  • JOINを使ったSQL文を作成しようとしています。

    JOINを使ったSQL文を作成しようとしています。 以下の様な3つのテーブルがある場合のSQL文を教えて下さい ※勉強の為、適当なテーブルを作成しましたが、やりたい事は  JOINの中に更にJOINさせたSQL文を作成したいと思ってます 表A  USER_ID(プライマリキー)  NAME 表B  USER_ID(プライマリキー) ※表A.USER_IDと紐着く  BUMON(プライマリキー)  TERM(プライマリキー) 表C  BUMON(プライマリキー) ※表B.BUMONと紐着く  TERM(プライマリキー) ※表B.TERMと紐着く  MEMBER 【取得したい項目】  表A.USER_ID 【抽出条件】  表CのMEMBERの値が'10','20'以外(である表AのNAMEを取得)

  • SQL文を教えてください

    SQL文を教えてください。 以下のテーブルがあります。 T入金 [ID] [名前] [金額] [入金日] 1, 山田, 25000, 2009/01/01 2, 佐藤, 5000, 2009/02/01 3, 山田, 30000, 2009/01/02 4, 佐藤, 45000, 2009/02/02 5, 佐藤, 10000, 2009/02/03 同じ人物で、入金額50000円に至ったときの入金日を 抽出したいと思っています。 上記データだと、 山田さんは入金日2009/01/02、 佐藤さんは入金日2009/02/02、 ということになります。 これを一つのSQL文で抽出できますでしょうか。 ご教授宜しくお願いいたします。 (Access2000のクエリで抽出しようとしていますが、Accessで無理ならSQL Server、MySQL、PostgreSQLでも可です)