• ベストアンサー

条件付きのCount

次のようなテーブルをidでカウントし「4」という結果を得たい (重複したものはカウントしない)のですがどのような式を 書いたらよろしいのでしょうか? 回答よろしくお願いします。 id | char 1 | A 1 | B 1 | C 2 | A 2 | B 3 | A 4 | B 4 | C

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

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

Oracleだと select count(distinct id) from テーブル; ですが、MySQLの環境が無いので未検証。お試しください。

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

その他の回答 (1)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

SELECT count( * ) FROM (SELECT `id` FROM `hoge_table` GROUP BY `id` ) AS `alias_hoge` とりあえず、こんな感じでもやりたい事は実現できると思います。

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

関連するQ&A

  • 条件付の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のカウント数 といった具合に取るにはどのように書けばいいのでしょうか? よろしくお願いします。

  • MySQL: 複数テーブルのcount

    複数テーブルの総行数(count値)を取得したいのですが、下記だとテーブルA,B,Cの結果が バラバラに出力されてしまいます。 【入力条件】 mysql> select COUNT(*) AS 列ID from テーブルA      union all      select COUNT(*) AS 列ID from テーブルB      union all      select COUNT(*) AS 列ID from テーブルC; 【出力結果】       +-----+       | 列_ID |       +-----+       |  1  | ←テーブルAの合計:行数       |  2  | ←テーブルBの合計:行数       |  3  | ←テーブルCの合計:行数       +-----+ 総行数:6を一発で取得するには、どのようにしたらよろしいのでしょうか? 大変恐縮ですが、ご教授よろしくお願いいたいます。 <<MySQLのverは5,5です。

    • ベストアンサー
    • MySQL
  • アクセス2010 他テーブルを参照してCount

    アクセス2010 テーブルA [F1] ab1 aa1 ah0 cd1 gh0 を元に、頭1文字の重複行を削除したテーブルBがあります テーブルB [F1] [F2] a..........0 c..........0 g..........0 テーブルB[F2]に テーブルA[F1]の最後1文字が「1」である条件下での数をカウントしたい。 [F1] [F2] a..........2 c..........1 g..........0 DoCmd.RunSQL "UPDATE テーブルB (F2) SELECT Count(*) FROM テーブルA Where テーブルA.F1 Like '???1' And テーブルB[F1]=Left(テーブルA[F1],1) ;" みたいな感じで・・・?? よろしくお願い致します。

  • 異なる条件でcountしたい

    使用しているのはMySQL5.5です。 以下のようなデータベース(→元データベース)があり、プロジェクト毎の作業時間と作業日数を出すために select プロジェクト, count(*), sum(時間) order by プロジェクト; としたところ、同一日の作業が二重にカウントされて、正確な作業日数が計算できません。 →誤った集計結果1 また、 select プロジェクト, count(*), sum(時間) order by プロジェクト, 作業; とすると、今度はプロジェクト単位で作業時間が計算できませんでした。 →誤った集計結果2 これを、同一日はカウントせず、作業日数と作業時間を集計するには どのようにすればいいでしょうか。 ・元データベース 日付|プロジェクト|作業|時間 2015-10-01|A|DB作成|2 2015-10-01|A|データ入力|1 2015-10-01|B|DB作成|3 2015-10-02|A|データ入力|1 2015-10-02|B|DB作成|4 2015-10-02|B|データ入力|2 ・誤った集計結果1 プロジェクト|作業日数|時間 A|3|4 B|3|9 ・誤った集計結果2 プロジェクト|作業日数|時間 A|1|2(DB作成のrow) A|2|2(データ入力のrow) B|2|7(DB作成のrow) B|1|2(データ入力のrow) ・理想の集計結果 A|2|4 B|2|9

    • ベストアンサー
    • MySQL
  • 複数テーブルの結合

    テーブルA  a_id id a_data a_date ----------- テーブルB id b_data b_date テーブルC id c_data c_date ----------- テーブルAとテーブルBは「id」がキーで1:N(Nは0も含む) テーブルAとテーブルCは「id」がキーで1:N(Nは0も含む) このような3のテーブルで a_idを検索キーにして次のフィールドのデータを抽出したいのですが。。。 ※テーブルCのc_dateを降順で先頭の1レコードのみ ※テーブルBのidをカウントする selectの結果(イメージ) id a_data a_date count(B.id) c_date ------------------------------------- 001 AAAA 2007/02/01 20 2007/02/14 005 BBBB 2007/02/02 0 2007/02/10 006 CCCC 2007/02/02 0 2007/01/08 003 DDDD 2007/02/01 100 002 EEEE 2007/02/01 9 004 FFFF 2007/02/01 0 よろしくお願いします

  • エクセルの複数のフィールドの重複のチェック方法を教えて!

    エクセルの複数のフィールドの重複のチェック方法を教えて! 下のようなテーブルで3人の顧客IDより月別のピボットテーブルをエクセルで作成すると IDを重複してカウントしてしまいます。Aランク顧客IDは2010/1に3のカウントなのですが、顧客数は1としたい場合、CustomerIDと購買月が重複せずにカウントさせる方法や関数を教えてください。 CustomerID ランク 購買月   1017        A    2010/1 1017        A    2010/1 1017        A    2010/1 1017        A    2010/2 1017        A 2010/3 226424    A 2010/2 226424 A 2010/ 2226424 A 2010/2 226424 A 2010/3 226424 A 2010/3 823622 B 2010/2 823622 B 2010/2 823622 B 2010/3 823622 B 2010/3 1205 B 2010/2

  • 2つのテーブルでの合計取得

    環境:Mysql4.1.19 次のようなAテーブルとBテーブルのキーごとのレコードカウントを取得したいのですが、どのようなSQL文を作ればよいのでしょうか? Aテーブル ID Hiduke 005 2006-10-1 006 2006-10-3 001 2006-10-1 005 2006-10-6 005 2006-10-1 Bテーブル ID Hiduke 006 2006-11-1 006 2006-11-3 001 2006-11-1 003 2006-11-6 005 2006-11-1 から、次のような結果を得たい。 005 4 006 3 001 2 003 1 以上です。初心者ですが、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • C言語の条件式での~(チルド)について

    C言語に関しての質問です。 以下のようなプログラムでは変数bをキャストした場合と しない場合で条件式の判定結果が違います。 変数bはもともとunsiged char型なのでキャストは不要だと 思ったのですが、なぜ結果が違うのでしょうか? (条件式if(a != ~b)の判定結果も偽になることを期待していました。) unsigned char a; unsigned char b; a = ~0x98; b = 0x98; if(a != ~b) { printf("こっちは入る"); } if(a != (unsigned char)(~b)) { printf("こっちは入らない"); }

  • 複数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
  • 外部結合でのcount結果でゼロを表示

    以下の様なテーブルがあります。 テーブルを結合してカウントを行っているのですが、 tbl1の商品コードに存在しないユーザが存在しない場合や tbl3のフラグが”0”または”1”が存在しない場合、 ゼロ件と出したいのですが出力されません。 どうすれば期待した結果になるか教えて下さい。 ■tbl1 ID SYOHIN_CODE ---- ----------- 1 A01 2 B01 3 C01 4 D01 5 E01 ■tbl2 ID NUM SYOHIN_ID ---- ------- --------- 1 NUM001 1 2 NUM002 2 3 NUM003 3 4 NUM004 4 5 NUM005 1 6 NUM006 1 7 NUM007 2 8 NUM008 3 9 NUM009 4 10 NUM010 1 ■tbl3 ID NUM_ID FLG ---- -------- ---- 1 1 1 2 2 1 3 3 1 4 4 0 5 5 0 6 6 0 7 7 0 8 8 1 9 9 0 10 10 0 ■実行した結果 SYOHIN_CODE FLG CNT ----------- ---- --------------- A01 0 3 A01 1 1 B01 0 1 B01 1 1 C01 1 2 D01 0 2 ■期待する結果 SYOHIN_CODE FLG CNT ----------- ---- --------------- A01 0 3 A01 1 1 B01 0 1 B01 1 1 C01 0 0 C01 1 2 D01 0 2 D01 1 0 E01 0 0 E01 1 0 実行したSQL select T1.syohin_code,T3.flg,count(T2.num) cnt from tbl1 T1 inner join tbl2 T2 on T1.id=T2.syohin_id inner join tbl3 T3 on T2.id=T3.num_id group by T1.syohin_code,T3.flg order by T1.syohin_code ;

このQ&Aのポイント
  • 父の発言を忘れて穏やかになりたいです。
  • 父から聞かされるセンセーショナルな言葉によって心が傷ついています。
  • 怒りや悲しみの感情に苦しんでいる状態から脱出したいです。
回答を見る