• ベストアンサー

条件別にカウントした結果を一覧表示したい

次のような表があるとします。 科目 点数 英語 93 英語 96 英語 88 独語 95 独語 83 仏語 84 仏語 89 たとえば90点以上取った回数を調べたいだけなら、 select 科目,count(科目) as 回数 from テーブル where 点数>=90 group by 科目; とすればよいのですが、 科目、85点以上の回数、90点以上の回数、95点以上の回数 というふうにまとめたいとき、上記SQL文の数字を変えたものをjoinするしかないのでしょうか? 簡単なやり方があったら教えてください。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じです、sumを使うのがポイント create table hoge(科目 varchar(30),点数 int); insert into hoge values('英語',93),('英語',96),('英語',88),('独語',95),('独語',83),('仏語',84),('仏語',89); select 科目 ,sum(点数>=95) as 95up ,sum(点数>=90) as 90up ,sum(点数>=85) as 85up from hoge group by 科目;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MySQLで合計と小計の計算方法を教えてください

    SQLで判らないことがあります。 生徒NO | 科目 | 点数         テーブル:testdb  --------------------------- 001    英語   95 001    国語   90 001    理科   75 001    社会   73 001    算数   62 002    英語   93 002    国語   87 002    理科   78 002    社会   71 002    算数   68 -------------------------------- 30人分位あり、(全員の5科目の合計)- (国語と社会の合計)=(表示したい数値)にしたいのです。 $sql = "select SUM(点数) as goukei,SUM(点数)-(select SUM(点数) from testdb where 科目=国語 and 科目=社会)as shoukei from testdb "; また、基準点数を儲けて合計点数-基準点数も求めたいのです。$kijyunは変数。 $sql2 = "select SUM(点数) as goukei,SUM(点数)-(select count(*) * $kijyun from testdb )as kijyunten from testdb "; 上記で結果が得られません。教えてください!

    • ベストアンサー
    • MySQL
  • MySQLで合計と小計の計算方法を教えてください パート2

    MySQLで合計と小計の計算方法を教えてください パート2 name | kamoku | tensu         テーブル:testdb  --------------------------- 001    英語   95 001    国語   90 001    理科   75 001    社会   73 001    算数   62 002    英語   93 002    国語   87 002    理科   78 002    社会   71 002    算数   68 -------------------------------- 30人位いるのですが、やりたい事は以下になります。 基準点数(好きな点数を入力)$kijyunt sql = select sum(tensu) as stensu, sum(tensu)-(select count(*) * $kijyun from testdb) as hensa from testdb where tensu >= 70 全科目70点以上の点数を合計し、全体のレコード×70の点数を引き算したいのです。 しかしながらうまく表示しません。どこが悪いかご指摘お願いします。

    • ベストアンサー
    • MySQL
  • sedに関する質問

    ★以下のファイルがあるとします。 SQL> select count(*) from koumoku where no = 1052 and mid =2; COUNT(*) ---------- 7 SQL> select count(*) from koumoku where no = 1053 and mid =3; COUNT(*) ---------- 4 SQL> select count(*) from setumei where no = 1054 and mid =2; COUNT(*) ---------- 9 SQL> select count(*) from setumei where no = 1055 and mid =7; COUNT(*) ---------- 5 SQL> select count(*) from imi where no = 1056 and mid =2; COUNT(*) ---------- 9 SQL> select count(*) from imi where no = 1057 and mid =6; COUNT(*) ---------- 3 ★ここでsedコマンドを利用して、 koumoku COUNT(*) ---------- 7 koumoku COUNT(*) ---------- 4 setumei COUNT(*) ---------- 9 setumei COUNT(*) ---------- 5 imi COUNT(*) ---------- 9 imi COUNT(*) ---------- 3 のように取り出したいのですが、方法が分からないので、 誰か教えてもらえますか?宜しくお願いします。

  • 入れ子を使わずにレコードの総計を出したい

    こんにちわ。PostgreSQLのSQL文について質問させてください。 以下のSQL文を実行したとき、 # select c.id from C c left join S s on (s.id=c.id) where c.num = 1 group by c.id having count(s.id) >= 5; id ---- 7 5 (2 rows) というデータが表示されるんですが、このSQL文で抽出したデータの総件数を求めるにはどうしたらいいでしょうか? 入れ子を使うと、 # select count(*) from (select c.id from C c left join S s on (s.id=c.id) where c.num = 1 group by c.id having count(s.id) >= 5) tmp; というふうに書け、 count ------- 2 (1 row) と表示されるのはわかりますが、入れ子を使わずに上のように表示させるにはどうしたらよいでしょうか? よろしくお願いいたします。

  • SQL count 別名を条件に使用

    いつもお世話になっております。 標題についてご教授頂きたく質問させて頂きました。 [SQL} select A, B, count(*) as cnt from product where A=1 and cnt > 2 group by A order by cnt desc とこのようにSQLを記述して実行したのですが、 cnt>2でエラーが出ます。 order by には count の別名を使用できるのですが、 where句やHAVINGでは使えません。 この場合 cont(*)>2 またはcount(項目名)>2 としなければならないのでしょうか

  • EXCELのVBAで重複を除いたカウント

    EXCELのVBAでSQLの SELECT COUNT(DISTINCT(ITEMS)) FROM TABLE WHERE SHOP = 'A' と同様のことを行いたいのですが、どのように考えたらよいでしょうか。 同じようなことができる関数でもよいです。

  • テーブルの結合について

    以下の二つを実行すると、2 の方がかなり速いのですが理由が分かりません。 分かる方教えてもらっていいですか? DBはMYSQLでInoDBです。 ちなみに Aは1万件、B は10万件ほど 1 のSQL SELECT * FROM A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) B ON A.id = B.XXX WHERE ・・・ GROUP BY A.id 2 のSQL (SELECT * FROM A ・・・ GROUP BY ID ) A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) ON A.ID = B.XXX.ID

  • ★年度ごとに情報を一覧表示

    各情報を、年度ごとに表示したいと考えています。 基となる年度の条件指定方法が分かりません。 (????と記述しているところです。) 各サブクエリは、年度ごとに情報がない時もあります。 select ????,1tbl.day ,2tbl.day ,3tbl.day from  (select nen,max(day) from 1tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 1tbl,  (select nen,max(day) from 2tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 2tbl,  (select nen,max(day) from 3tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 3tbl where ???? 各サブクエリの情報 1tbl-------2tbl------3tbl------- nen--day----nen--day----nen--day--- 2005-2005/12/12-2005-2005/12/13--------- ---------2004-2004/11/10-2004-2004/12/30 2002-2002/09/01------------------ 表示 nen--1day-----2day-----3day--- 2006-------------------- 2005-2005/12/12--2005/12/13------- 2004--------2004/11/10--2004/12/30 2003-------------------- 2002-2002/09/01-------------- 2001-------------------- ↑上記のように表示したいと考えています。 この形で取れるSQLの書き方はあるでしょうか。 (2006年や2003年のように、情報が0件のところは取れなくてもいいです。) サブクエリ部分をばらばらでSQL発行すれば済む話なのですが、 一度に取れる方法は無いのか気になりまして。 (年度のみのテーブルはありません。) よろしくお願いします。

  • mysql いろんな条件

    mysql いろんな条件 下記のようなテーブルより table1 3,60,,,,,テスト1,科目A 4,59,,,,,テスト1,科目B 3,60,,,,,テスト1,科目A 1,80,,,,,テスト1,科目B 3,60,,,,,テスト1,科目A 4,59,,,,,テスト1,科目B 5,23,,,,,テスト1,科目A 5,23,,,,,テスト1,科目B 7,13,,,,,テスト1,科目A table2 1,80,,,,,テスト1,科目B 3,60,,,,,テスト2,科目A 4,59,,,,,テスト2,科目B 3,60,,,,,テスト2,科目A 1,80,,,,,テスト2,科目B 3,60,,,,,テスト2,科目A 4,59,,,,,テスト2,科目B 5,23,,,,,テスト2,科目A 5,23,,,,,テスト2,科目B 7,13,,,,,テスト2,科目A 1,80,,,,,テスト2,科目B ↓ 結果1 テスト1,2,0,3,5 テスト2,2,0,3,5 結果2 科目A,0,0,6,4 科目B,4,0,0,6 現在 select count(*) from table1 where col7 = 'テスト1' and col1 = 1 select count(*) from table1 where col7 = 'テスト1' and col1 = 2 select count(*) from table1 where col7 = 'テスト1' and col1 = 3 select count(*) from table1 where col7 = 'テスト1' and col1 >3 このように1つ1つできていているのですが、 まとめてできる方法を知らないです。 また、1つずつやるとその分時間がかかります。 さらに1つのテーブルのみでしかやり方を知りません。 上記のようなテーブルから 結果1 テスト1,2,0,3,5 テスト2,2,0,3,5 結果2 科目A,0,0,6,4 科目B,4,0,0,6 このようなテーブルにする方法を教えてください

  • SQLにて列の値を一まとめにしてカウントできないでしょうか?

    皆様はじめまして。SQL勉強中のものです。 本日はどうしても解決できないことがありますので質問させていただきます。 テーブルAにCONDITIONという列があり、そこには1~5の値が入ります。 このCONDITION列に1~5それぞれ何件あるかを取得したいと考えております。単純にcount関数にて1~5のレコード数を取得するならば以下のSQLで取得可能と思います。 SELECT COUNT(CONDITION) FROM A WHERE CONDITION = '1' 以上をWHERE条件を変えて5回繰り返し。 これだと5回SQLを発行することになります。 これを一回のSQLにて取得できないかと悩んでおります。 皆様、どうかよろしくお願い致します。

このQ&Aのポイント
  • 電源をONすると、キヤノン製品TR9530の画面にサポート番号6000が表示されます。しかし、紙詰まりは確認できません。この問題の解決方法を教えてください。
  • キヤノン製品TR9530を電源ONすると、画面にサポート番号6000が表示されます。しかし、紙詰まりはないようです。この問題の解決策を教えてください。
  • 電源を入れると、キヤノン製品TR9530の画面にサポート番号6000が表示されますが、紙詰まりはありません。この問題を解決する方法を教えてください。
回答を見る