• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:積み上げ棒グラフのためのSQL SELECT文)

積み上げ棒グラフのためのSQL SELECT文

このQ&Aのポイント
  • Visual Studio Express 2013 for Webでデータベースアプリを作成し、積み上げ棒グラフを作成するためのSQL SELECT文を教えてください。
  • データはPerson表にあり、横軸S_Id、縦軸C_Idの数を元に積み上げ棒グラフを作成します。
  • 具体的には、S_Id毎にC_Idの数の内訳を示したグラフを作成し、カウント対象はZがNULLでないものになります。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

こういうことでしょうか? select S_Id , count(case C_Id when 1 then 1 else null end) Count_1 , count(case C_Id when 2 then 1 else null end) Count_2 , count(case C_Id when 3 then 1 else null end) Count_3 , count(case C_Id when 4 then 1 else null end) Count_4 , count(case C_Id when 5 then 1 else null end) Count_5 , count(case C_Id when 6 then 1 else null end) Count_6 , count(case C_Id when 7 then 1 else null end) Count_7 from Person where Z is not null group by S_Id; C_Idの種類分だけ列記しなくてはいけませんが・・

nayamerunikki
質問者

お礼

ありがとうございました。 うまくできました。

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

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> COUNTで、ZがNULLでなくかつC_Id=1のものをカウントする、 単にWhereで良いのでは? SELECT S_Id, C_Id, COUNT(Z) FROM Person WHERE Z ls Not Null AND C_Id = 1 GROUP BY S_Id, C_Id;

nayamerunikki
質問者

補足

ご回答ありがとうございます。 しかし、積み上げ棒グラフのためには、 SELECT S_Id, C_Id=1の数(ZがNULLでない), C_Id=2の数(ZがNULLでない), C_Id=3の数(ZがNULLでない), ... FROM Person GROUP BY S_Id; のような形にする必要があるようで、「ZがNULLでないC_Id=xの数」を一語でSELECTに列挙する必要があります。

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

関連するQ&A

  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?

  • Select文1 マイナス Select文2

    テーブルA ユーザーID,地名,県名,評価 テーブルB ユーザーID,県名,制覇flag のような二つのテーブルがあると仮定してSelect文1、 "select 県名,count(地名) from テーブルA where ユーザーID=1 group by 県名 order by count(地名);" の結果が 県名,count(地名) 北海道,30 東京,22 京都,15 名古屋,10 鳥取,9 沖縄,8 であるとし、 Select文2、 "select 県名 from テーブルB where usrid=1 and 制覇flag='true'" の結果が、 県名 北海道 東京 とします。 このSelect文1の結果から、Select文2の結果を引いて 県名,count(地名) 京都,15 名古屋,10 鳥取,9 沖縄,8 の結果を得るにはどうすればよいでしょうか? Mysqlのバージョンは5.0.21です。

    • ベストアンサー
    • MySQL
  • UPDATE文の中でのSELECT文は可能?

    タイトル通りなのですが UPDATE文構造の中にSELECT文は使用できるのでしょうか? リファレンス見ても使えそうに無いのでたぶんできないと思うのですが、やりたいことは customer ┌──┬─────┐ │id │frequency │ ├──┼─────┤ │101 │ 2    │ │102 │ 1    │ │103 │ 1    │ │104 │ 2    │ └──┴─────┘ buy ┌──┬──────┐ │id │catalognum │ ├──┼──────┤ │101 │1255 │ │104 │1353 │ │102 │1255 │ │103 │1521 │ │104 │1351 │ │105 │1345 │ │101 │1351 │ └──┴──────┘ 上記のテーブルのcustomerへのUPDATEです。 buy.id個数をCOUNTしてcustomer.frequencyに反映させるということです。 REPLACE内でのSELECTは可能ですが、いちいち全てのfieldを設定してやらないと、他のフィールドがNULLで埋まってしまうので、UPDATE文で更新できるなら比較的楽かなぁと思っています。 ------------------------------- REPLACE文だとこんな感じです REPLACE customer (id,frequency) FROM customer , buy WHERE buy.id = customer.id GROUP BY customer.id ----------------------------- 環境 MySQL 3.23.58 freeBSD PHP 4.3

  • SQLのcount()とgroup by

    以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。

  • SQLのSELECT文の集計方法について

    SQLのSELECT文についての質問です。 各店舗ごとの利用数を集計したいです。 自分なりに考えて作ってみました。 結果は期待通りなのですが.... このような場合 みなさんだったら、どのようにするのでしょうか? よろしくお願いします。 【店舗テーブル】 TENPO_CD  TENPO_NAME 1      ホテル1 2      ホテル2 3      ホテル3 4      ホテル4 5      ホテル5 【利用テーブル】 ID TENPO_CD 1  1 2  1   3  2 4  3 5  1 ・ ・ 【希望結果】 1 ホテル1  3 2 ホテル2  1 3 ホテル3  1 4 ホテル4  0 5 ホテル5  0 select a.tenpo_cd,a.tenpo_name,c.cnt from 店舗テーブル as a left join ( select 利用テーブル.tenpo_cd,count(利用テーブル.tenpo_cd) as cnt from 利用テーブル group by 利用テーブル.tenpo_cd ) as c on a.tenpo_cd = c.tenpo_cd where order by a.tenpo_cd

  • 割合(パーセント)を求めるにはどのようにSQLを書けばよいのでしょうか?

    SQLで グループ毎にカウントした数でなくて割合を求めたいのです。 select name, count(*) from データベース名 group by name order by 2 desc; とすると、以下のように200件あるデータで グループ(名前)毎に個数が表示されますが、 田中 70 上村 120 橘川 10 下のように割合(パーセント)を求めるにはどのようにSQLを書けばよいのでしょうか? 田中 70 35% 上村 120 60% 橘川 10 5%

    • ベストアンサー
    • MySQL
  • 入れ子を使わずにレコードの総計を出したい

    こんにちわ。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) と表示されるのはわかりますが、入れ子を使わずに上のように表示させるにはどうしたらよいでしょうか? よろしくお願いいたします。

  • select文

    select文の質問なんですが、広告のデータでクリック数と売り上げを毎日取っていたとして、広告毎に累計のデータを見るときは、 select 広告名, sum(クリック数), sum(売り上げ) from 売り上げテーブル group by 広告ID 上記のsql文で取得できるかと思うのですが、取得する際にクリック数の合計でソートをかけたい場合には、どのようにすればよろしいのでしょうか? 上記の文にただ、order by クリック数を記述しても、1レコード単位でソートしてしまうため困っております。

    • ベストアンサー
    • MySQL
  • SQLのクエリで教えてほしいです。

    SQLのクエリで教えてほしいです。 ある列のTOP10を出してグラフを作成したいと考えております。 また、そのTOP10の行をカウントして何件あるかを知りたいのですが なかなか思うように動きません。 以下クエリを作ったのですが、結果に16行の結果(Top16?) になってしまいます。 また、一つのSQLで、Countも含めたいと思ってますが、こういった場合 はどこに記述すればいいのでしょうか。 select TOP (10) Percent hoge from hogehoge group by hoge order by hoge ご存知の方、よろしくお願い致します。

  • in (サブクエリ) わかんない

    table hh; +------+ | id | +------+ | 1 | | 2 | | 3 | | 2 | | 1 | | 1 | +------+ select id,count(*) as cou from hh group by id having count(*) in (1,2,3); こいつはOK select id,count(*) as cou from hh group by id having count(*) in (select count(*) from hh group by id); こいつはダメ 違いはなんですか、教えて下さい