none
SQL文について RRS feed

  • 質問

  •  

    こんにちは、

     

    下記のようなテーブルがあり、区分の0と0以外で会費有無の件数を
    求めたいのですが、どのようにSQLステートメントを記述すれば実現で
    きるか教えていただけないでしょうか。

     

    <テーブル>
    区分  会費
    0    あり
    0    ナシ
    1    あり
    1    あり
    1    ナシ
    7    あり
    9    あり

     

    <求めたい結果>
    区分  会費  件数
    0    あり  1件
    0    ナシ  1件
    1    あり   4件
    1    ナシ  1件

     

    下記のようなSQLでは余分なステップができてしまい面倒なので…
     SELECT 区分,会費,COUNT(*) FROM テーブル名
     GROUP BY 区分,会費 ORDER BY 区分,会費

     

    よろしくお願いします。

     

    2008年11月6日 5:04

回答

  • 例えば以下のようなクエリーはどうですか?

    Code Snippet

    SELECT 区分, 会費, count(*) AS 件数 FROM
      (SELECT CASE 区分 WHEN 0 THEN 0 ELSE 1 END AS 区分, 会費 FROM テーブル名) AS TBL
      GROUP BY 区分,会費
      ORDER BY 区分,会費

     

    CASE ~ WHEN ~ END で区分が0以外だったら1を返すようにして、

    そのクエリーの結果をテーブルとして扱うようにしたんですが。

     

    このクエリーで実行結果は<求めたい結果>になります。

    2008年11月6日 6:00

すべての返信

  • 例えば以下のようなクエリーはどうですか?

    Code Snippet

    SELECT 区分, 会費, count(*) AS 件数 FROM
      (SELECT CASE 区分 WHEN 0 THEN 0 ELSE 1 END AS 区分, 会費 FROM テーブル名) AS TBL
      GROUP BY 区分,会費
      ORDER BY 区分,会費

     

    CASE ~ WHEN ~ END で区分が0以外だったら1を返すようにして、

    そのクエリーの結果をテーブルとして扱うようにしたんですが。

     

    このクエリーで実行結果は<求めたい結果>になります。

    2008年11月6日 6:00
  • CatTailさん、ありがとうございました。

     

    まず1.case~when~endで区分列を0と0以外にする

    2.上記1の状態で集計するという事ですね

     

    実は、下記のようにも記述してみましたが、区分列の7と9が1になる

    だけ(当たり前ですが…)だったので、どうすれば…と思っていました。

    SELECT (CASE 区分 WHEN 0 THEN 0 ELSE 1 END) , 会費, count(*) AS 件数 FROM テーブル名
      GROUP BY 区分,会費
      ORDER BY 区分,会費

     

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

     


     

    2008年11月6日 6:29
  • こんにちは。

    フォーラムオペレーターの鈴木裕子です

     

    悩み中 さん、疑問が解決されたようで何よりです。

    今回は、CatTail さんの投稿が参考になったとのことですので、勝手ながら私の方で回答チェックを付けさせていただきました。

    悩み中 さんはチェックの解除ができますので、もし不適切でしたら修正をお願いします。

    引き続きの情報がありましたら、遠慮なく投稿してくださいね。

     

    これからもForumをご活用ください!

    それでは。

    2008年11月11日 5:50
    モデレータ