• ベストアンサー
  • すぐに回答を!

複雑なcountについて

val | num ----------- 9984 | 1 1234 | 1 9876 | 1 4567 | 1 9984 | 1 1234 | 1 9984 | 1 以上のようなテーブルで SELECT COUNT(*) FROM table_name WHERE val = 9984 SELECT COUNT(*) FROM table_name WHERE val = 1234 SELECT COUNT(*) FROM table_name WHERE val = 9876 SELECT COUNT(*) FROM table_name WHERE val = 4567 のように4つ実行することなく1度に 9984 => 3 1234 => 2 9876 => 1 4567 => 1 という結果を得たいのですが方法はありますでしょうか? ご教示お願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数139
  • ありがとう数2

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

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

select sum( case when val=9984 then 1 else 0 end ) as cnt1, sum( case when val=1234 then 1 else 0 end ) as cnt2, sum( case when val=9876 then 1 else 0 end ) as cnt3, sum( case when val=4567 then 1 else 0 end ) as cnt4 from テーブル でやるか select val,count(*) from テーブル where val in ( 9984, 1234, 9876, 4567 ) group by val でやるか

共感・感謝の気持ちを伝えよう!

質問者からのお礼

どちらかの方法で試してみます。ありがとうございました。

関連するQ&A

  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • 二つのcount()を一文で

    Select count(COLUMN_A) from TABLE_A where USERID=1 and FLAGS=1; Select count(COLUMN_A) from TABLE_A where USERID=1 and FLAGS=2; を1つの文で取得する方法はないでしょうか?

    • ベストアンサー
    • MySQL
  • count関数の値をwhere句で使用する方法について

    宜しくお願い致します。 例えば、下記の様にデータを検索します。 select column1,count(column2) as column2_num from hoge_table group by column2_num すると、検索結果にはcolumn1のそのままの値と、column2の合計数が表示されると思います。 このcolumn2の合計数に対してwhere句で絞込みを行う方法はありませんか? asで定義した値をそのままwhere句で使用できないとの事なので、 select column1,count(column2) as column2_num from hoge_table where count(column2) = '1' group by column2_num とやってみたんですが、検索出来ませんでした。 ご存知の方、ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • count(1)とcount(*)の違い

    初心者です。 以下のSQL文の違い及びcount(1)の1が何を表しているのか 教えて頂けないでしょうか? select count(*) from table select count(1) from table また、参考しやすいサイト等ありましたら教えて頂けないでしょうか?

  • oracleのUSER_TABLESのNUM_ROWSって?

    USER_TABLESのNUM_ROWについて教えてください。 リファレンスマニュアルを見るとNUM_ROWは表内の行数をあらわすようです。 実行してざっと見てみるとCOUNT(*)で件数を取ったのと同じ値になるケースが多いですが、 (NULL)のケースもあります。 違う数値の場合もあります。 そのNULLの表はデータ0件なのかと思ったら、しっかりと結構なデータ量があったりします。 NUM_ROWは表内の行数=レコード数かと思ったのですがどうも違うようです。 USER_TABLESのNUM_ROWとは何でしょうか? <イメージ> SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = 'TBL1' TABLE_NAME NUM_ROWS ---------- -------- TBL1 (NULL) TBL2 35 SELECT COUNT(*) FROM TBL1 count(*) -------- 980 SELECT COUNT(*) FROM TBL2 count(*) -------- 35

  • 動的SQLのCOUNTのとり方

    動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。

  • ビューで引数を使いたい

    4つのテーブルのいずれかをアクセスしますが、 select文はひとつでwhereでテーブルを指定したいので、  例:select * from ビュー where table_no=1 とかで、table_noの値でアクセスするビューは 作れますか? ※この例の場合、select * from table1が実行したい。 4つのテーブルは全て同じ構造で、 データが違うのみです。

  • 条件付のCOUNTで値が取れません。

    INの条件ごとにカウントした数値を表示したいのですが 下記の様に書いて実行すると、 列Bの1も2も同じ列Aのカウント値になってしまいます SELECT (  SELECT COUNT(列A) FROM テーブルA  WHERE 列B IN (1,2) ) AS 列別名 FROM テーブルA WHERE 列B IN (1,2) 列Bの値が1の時の列Aのカウント数 列Bの値が2の時の列Aのカウント数 といった具合に取るにはどのように書けばいいのでしょうか? よろしくお願いします。

  • 複数JOINしているとCOUNTが正しく取得できな

    LAMP環境で開発をしています。 SQL文でCOUNTを求める際に、まとめて結果を求めようとして上手く行きません。 状況としては以下です。 テーブルdはidをkeyにa,b,c3つのテーブルとjoinしています。 id = 1の場合、テーブルa,b,cにマッチするレコードがそれぞれに4個、1個、0個あります。 ひとつひとつを SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count FROM d INNER JOIN a ON a.id = d.id WHERE d.id = 1 として結果を求めると4,1,0と出るのですが、まとめて SELECT COUNT(CASE WHEN a.name IS null THEN 1 ELSE null END) as a_count, COUNT(CASE WHEN b.name IS null THEN 1 ELSE null END) as b_count, COUNT(CASE WHEN c.name IS null THEN 1 ELSE null END) as c_count FROM d INNER JOIN a ON a.id = d.id INNER JOIN b ON b.id = d.id INNER JOIN c ON c.id = d.id WHERE d.id = 1 とすると28,5,0という値が返されます。 どのように書けば正しい4,1,0を得られるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 最新の支払い金額と支払い回数を表示したい。

    以下のテーブルで、それぞれの人の最新の支払い金額とそれぞれの人の支払い回数を求めようと考えてます。 最新の支払い金額、それぞれの支払い回数、と別々には取得できるのですが、一度で取得するSQLは、どう書けばいいのでしょうか? よろしくお願いします。 -テーブル name | amount | created_on A | 340 | 2005/12/01 A | 220 | 2006/05/13 A | 820 | 2008/12/22 B | 400 | 2007/02/13 C | 290 | 2008/12/09 B | 900 | 2009/04/09 -期待する実行結果 name | created_on | times A | 2008/12/22 | 3 | B | 2009/04/09 | 2 | C | 2008/12/09 | 1 | -最新の支払い金額を求める SELECT A.name, A.created_on FROM table AS A WHERE A.created_on = ( SELECT MAX( created_on ) FROM table AS B WHERE A.name = B.name ) ORDER BY A.id -それぞれの支払い回数を求める。 SELECT name, COUNT(*) AS times FROM table GROUP BY name

    • ベストアンサー
    • MySQL