• ベストアンサー

複数表からのカウントを教えてください

<table A> no name 1 yoshida 2 tanaka <table B> no sub score 1 german 100 1 english 100 1 science 50 tableAとtableBの2つの表があり 1 yoshidaさんが100点をとった科目の数を (ここでは2となります) カウントしたいのですが以下の_________で どのように入力したらいいでしょうか 先週から始めたばかりで表の入力はできるよう になったのですがカウントのしかたがよく わかりません よろしくお願いします SELECT tableA.no as No, tableA.name as Name, ___________________ FROM tableA, TableB where(tableA.no = tableB.no and tableB.score = 100 and tableB.no = 1 )

  • MySQL
  • 回答数2
  • ありがとう数3

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

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

こんばんは。 ベタですが・・・、 SELECT A.no, A.name, C.cnt FROM A, (SELECT COUNT(*) AS cnt FROM B WHERE score = 100 AND no = 1) AS C WHERE A.no = 1 一応取れますが、あくまでもご記載のデータ構造を参考にしてます。 Aの結果が1行じゃないようなデータなら、これではダメですよ。 (^^ゞ

arumisoy
質問者

お礼

1行なので大丈夫です。ありがとうございました

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

惜しいです。 集計してあげましょう。 select count(*), tableA.no as No, tableA.name as Name FROM tableA, TableB where(tableA.no = tableB.no and tableB.score = 100 and tableB.no = 1 ) group by tableA.no, tableA.name

arumisoy
質問者

お礼

いろいろ書き方があるのですね。ありがとうございました

関連するQ&A

  • 複数表からのカウント(2)教えてください

    前回の質問と関連しますが 今度は複数の人について 以下のような処理を行うときのクエリーでうまくいか ないのですがどのようになおせばいいでしょうか。 よろしくお願いします <table A> n id name 1 1 yoshida 2 2 tanaka <table B> n id sub score 1 1 AAA 100 2 1 BBB 100 3 1 CCC 50 4 2 AAA 80 5 2 BBB 100 6 2 CCC 50 <result> name count yoshida 2 tanaka 1 tableAとtableBの2つの表があり tableAの2人(以上あり)のscoreが100である subの数をカウントしたい場合 SELECT tableA.name as Name, count(*) FROM tableA, TableB where(tableA.id = tableB.id and tableB.score = 100 )

    • ベストアンサー
    • MySQL
  • 複数表での集計値について

    以下のようなテーブル構造。SQLで 集計値を求めたいのですがCNTの値が tableCの件数を取得してしまいます。 (取得したいのはtableA.ID毎のtableB.ID2の件数) 宜しくお願いします。 ・tableA ------------- ID ------------- ・tableB ------------- ID | ID2 ------------- ・tableC ------------- ID2 | TIME ------------- SELECT tableA.ID ,SUM(tableC.TIME) AS TIME ,COUNT(tableB.ID2) AS CNT FROM tableA,tableB,tableC WHERE tableA.ID = tableB.ID AND tableB.ID2 = tableC.ID2 GROUP BY tableA.ID

    • ベストアンサー
    • MySQL
  • Joinしてカウントしたいのですが,,,

    どうにもSQLになじめず困っている初心者です。宜しくお願い致します。 tableAとtableBがあり,それぞれ6つの列があります。両方とも,英語の人名を入力したものです。 tableAは添付した画像のようになっていて, A_ID, A_Key, A_firstname1, A_firstname2, A_lastname1, A_lastname2 と6つの列があります。要は英語の人名のデータなのですが,別名や綴り違いがあるためにfirst nameもlast nameも2列ずつあります。tableAは,これが数百行あります。 tableBも同様に, B_ID, B_Key, B_firstname1, B_firstname2, B_lastname1, B_lastname2 と6つ列があります。ただしこちらは数万行あります。 やろうとしていることは,名前の綴り違いなどを考慮して,tableBの中にtableAの人名が何回出てくるか数えて,その数字をA_IDと一緒に表示するViewを作る,というものです。 そこで,以下のようなクエリを書きました。DBMSはMySQL 5.2を使っています。 Create View NewView as select tableA.A_ID, count(*) as Num from tableA join tableB on (tableA.A_firstname1 in (tableB.B_firstname1, tableB.B_firstname2)) and (tableA.A_lastname1 in (tableB.B_lastname1, tableB.B_lastname2)) group by tableA.A_ID ところが,出力されたViewはどうも思っていたものとは違い,名前が一致していないものもカウントされてしまいます。どこが間違っているのでしょうか。 お詳しい方のお知恵を拝借できたらと思います。どうか宜しくお願い致します。

  • 1つのテーブルから複数のテーブルへのデータ振分け

    MySQLを使用して、tableAというテーブルのデータを tableB,tableC,tableDというテーブルに振り分けたいと思っています。 1日1回、自動的に行いたいと思っています。 たとえば、tableAのテーブル構成が下記のようなもので ================== name sex birth address phone email company ================== name,address,phoneはtableBに name,sex,birthはtableCに name,companyはtableDに分けるというような イメージです。 私の考えでは、下記のようなSQL文をPHPから呼び出して、タスクで 実行させてそれぞれ別のテーブルに振り分けようと思っている のですが、、もっと良いツールや方法があればお教えいただけ ませんでしょうか。 宜しくお願いいたします。 ---------------------------------------------------------------------------------------------------- INSERT INTO tableB (name,address,phone) SELECT tableA.name,tableA.address,tableA.phone FROM tableA AND INSERT INTO tableC (name,sex,birth) SELECT tableA.name,tableA.sex,tableA.birth FROM tableA AND INSERT INTO tableD (name,company) SELECT tableA.name,tableA.company FROM tableA; ----------------------------------------------------------------------------------------------------

  • 不要なwhere文が混じった重複レコードのカウント

    下記のSQL文があります。 tableA内で、tableA.id(A.id)は重複があります。 tableA内でのtableA.id(A.id)の重複レコード数をcount関数などでSELECTしたいのですが、 下記SQL文からどのように付け加えたらいいのか、お分かりの方いますでしょうか? SELECT A.id as id, A.xxx as xx, A.yyy as yy, B.zzz as zz FROM tableA A, tableB B WHERE A.id = B.id AND A.xxx = x AND A.yyy = y なお、「A.yyy = y」という条件は、tableA.idの重複レコード数をカウントする上で必要な条件なのですが、 「A.xxx = x」という条件は、tableA.idの重複レコード数をカウントする上で、不要な条件です。 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • カウント結果を1レコードの中で横に並べたい

    カウント結果を1レコードの中で横に並べたい 以下のテーブルを、 test_table id   group  name 1    100   テスト1 2    100   テスト1 3    100   テスト1 4    200   テスト1 5    200   テスト1 6    200   テスト2 7    200   テスト2 8    200   テスト2 9    200   テスト2 nameごとのカウント、更に100だけのカウント、200だけのカウントといったように、 以下のように横に並べることは可能でしょうか? name   合計  100計   200計 テスト1  5    3      2 テスト2  4    0      4 まず、nameごとの合計を取得するクエリを作って、 それに、100計列、200計列の部分をサブクエリでもってきたのですが、 これで動くには動くんですが、このやり方しかないものでしょうか。 ご教示おねがいします。 SELECT t.name, COUNT(*) as '合計', (SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '100' ) as '100計', (SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '200' ) as '200計' FROM test_table as t WHERE 1 GROUP BY t.name;

    • ベストアンサー
    • MySQL
  • 複数テーブル検索で同idの部分は結合させたい

    初心者です。 ちょっと伝えずらいのですが、 下記のようなテーブル構造になっています。 ■tableA +----+-------------------+------------------------------------------+ | id | title | body | +----+-------------------+------------------------------------------+ | 1 | test1 | aaaaaaaaaa | | 2 | test2 | bbbbbbbbbbbb | +----+-------------------+------------------------------------------+ ■tableB +----+-------------------+------------------------------------------+ | id | name | sex | +----+-------------------+------------------------------------------+ | 1 | taro | men | | 2 | yoko | women | +----+-------------------+------------------------------------------+ ■tableC +----+-------------------+------------------------------------------+ | id | num | order_id | +----+-------------------+------------------------------------------+ | 1 | 33 | 1 | | 2 | 66 | 2 | +----+-------------------+------------------------------------------+ ■tableD +-------------------+------------------------------------------+ | icons | order_id | .+-------------------+------------------------------------------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 5 | 1 | | 1 | 2 | | 3 | 2 | +-------------------+------------------------------------------+ tableA,B,Cのidを軸にデータを表示したいのですが、 --------------------------------------------------------- tableA.id , body , name , sex , num , order_id FROM tableA , tableB , tableC WHERE tableA.id = tableB.id AND tableA.id = tableC.id ---------------------------------------------------------- で出力できました。 で、tableDのiconsの内容も出力したいのですが、 --------------------------------------------------------- tableA.id , body , name , sex , num , order_id , icons FROM tableA , tableB , tableC WHERE tableA.id = tableB.id AND tableA.id = tableC.id AND tableC.order_id = tableD.order_id ---------------------------------------------------------- でやると、2行しかデータがでないはずなのですが、 6行出力されてしまいます。 たぶん、tableDのデータの持ち方が、 ひとつのidに複数のiconsがある場合は、 行ごとにレコードを分けているためだと思いますが・・・ tableDの行分、6行でているのです。。 なので、期待する結果は、 ちゃんとidの数分だけ出力されて、 同order_idにiconsが複数ある場合は、 行ごとに分かれるのではなく、 ひとつのカラム?にカンマ区切りなどで 入れたいのですがどうしたらよいでしょうか?? ↓期待する結果 ----------------------------------------------------------------------- +----+-------------------+------------------------------------------+ | id | title | body | order_id | icons +----+-------------------+------------------------------------------+ | 1 | test1 | aaaaaaaaaa | 1 |1,2,3,5 | 2 | test2 | bbbbbbbbbbbb | 2 | 1,3 +----+-------------------+------------------------------------------+ ※カンマじゃなくてもいいです わかりづらくて申し訳ありませんが、 ご教授お願いいたします。 MySQL 5.0.90-log ちなみにec-cubeの高度な設定の csvを吐き出す部分で使用しています。

    • ベストアンサー
    • MySQL
  • SQL 複数テーブルのupdate

    こんばんは。 複数テーブルの複数カラムをupdateしたいのですが、 うまくいかず困っています。 どなたか助けてください>_< テーブルA(tableA)のoptionAというカラムと、 テーブルB(tableB)のoptionBというカラムを両方更新したいんです。 やりたい内容のイメージとしてはこんな感じです↓ update tableA a, tableB b set a.optionA='OK', b.optionB='OK' where a.student_id=b.student_id and a.name='山田'; どなたかご指導お願いいたします。

  • SQL文の書き方

    SQL文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがSQL文の書き方がわかりません。 データの発生条件としては TableBのField1は必ずTableAのField1に存在するという条件です。 TableAのField1が「AAA」から「EEE」まである場合は、TableBのField1も必ず「AAA」から「EEE」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- TableA Field1 ---------------------------------------------------------------- AAA AAA AAA BBB BBB CCC DDD DDD EEE EEE EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableA.Field1) as RecCount, TableA.Field1 From TableA 結果 RecCount  Field1 3      AAA 2      BBB 1      CCC 2      DDD 3      EEE ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- TableB Field1 ---------------------------------------------------------------- BBB CCC CCC EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableB.Field1) as RecCount, TableB.Field1 From TableB 結果 RecCount  Field1 1      BBB 2      CCC 1      EEE ---------------------------------------------------------------- 希望する結果 TableAのRecCount TableBのRecCount TableAのField1 3                   AAA 2         1         BBB 1         2         CCC 2                   DDD 3         1         EEE

  • このSQL文を教えてください。

    Windows2000(SP3) SQLServer2000(SP3) で開発しています。 テーブルA 項目No,大分類コード,中分類コード,詳細コード,日付,内容 テーブルB 大分類コード,中分類コード,詳細コード,新_詳細コード,内容 TableA,Bでは大分類コード,中分類コード,詳細コードがリンクする このような状況で、TableA,Bを下記のようにjoinして、  TableA.大分類コード,   TableA.中分類コード,  TableB.新_詳細コード, が重複するデータを取得する場合のSQL文を教えてください。 (join) SELECT  TableA.*,  TableB.* FROM  TableA LEFT OUTER JOIN  TableB ON  TableA.大分類コード=TableB.大分類コード  AND  TableA.中分類コード=TableB.中分類コード  AND  TableA.詳細コード=TableB.詳細コード よろしくお願いします。