- 締切済み
SQL データ集計
yone_1117の回答
- yone_1117
- ベストアンサー率0% (0/10)
そのSQL、ほんとに実行結果が出るんですか? rtableのSelectに「登録日」が無い時点で rtable.登録日 between ~ でエラーになると思うんですが。「グループ」もSelectに無いですね。 質問に書いてあるSQLでは理想の結果どころか現在の結果も出ない気がするんですが・・・
関連するQ&A
- 【SQL 2つのコードが重複する場合、除外して集計する】
色々試行錯誤していますが、データの出力が正しくできません。 本日、別の質問を記載したのですが、上手く質問がまとまっていなかったために再度投稿したします。 統括会社(テーブルA)ごとにお店の評価を出力したいと思っています。 ただ、上手くできなくて困っています。 ======================== 行いたいこと ======================== テーブルは3つあります。 テーブルAは統括会社のテーブル、Bは店情報、Cはお店の評価結果です。 行いたいのは、統括会社のグループコードごとに、統括会社傘下のお店の評価結果の合計を表示することです。 その際、期間(登録日)を指定して合計値を表示するといったことを行いたいです。 ただ、評価結果の合計を算出する際に、お店(店名コード)ごとに過去の評価結果に”○”がついた項目CDは、重複しない形で計算をしたいです。 例) 項目CD”1-1-1”で店名コード"AAA"の評価結果が"○"が2つ、店名コード"BBB"の評価結果が"○"が零(0)、店名コード"CCC"が"○"4つの場合 評価結果2として算出 ================= テーブル ================= ■テーブルA →統括会社のテーブルです グループコード グループ名 ------------------------------------- AAAA ああああ BBBB いいいい CCCC うううう ■テーブルC →店情報のテーブルです 店名コード グループコード ------------------------------------- ららら AAAA せせせ BBBB ししし CCCC ■テーブルB →店の評価結果をもつテーブルです 項目CD 評価結果 店名コード 登録日 ------------------------------------- 1-1-1 ○ ららら 2000-10-10 1-1-1 ○ ららら 2007-12-10 1-1-1 × せせせ 2006-12-16 1-1-1 ○ ししし 2009-04-16 1-2-1 ○ ららら 2004-10-16 1-2-1 ○ せせせ 2007-01-16 1-2-1 ○ ししし 2003-12-14 1-2-1 〇 ししし 2007-12-15 ============== SQL ============== SQLは以下の通りです。 select テーブルA.グループコード,count(rtable.評価結果)、 from (select 店名コード,項目CD,評価結果,登録日 from テーブルC group by 店名コード,項目CD,評価結果,登録日 order by 店名コード,項目CD,評価結果,登録日) as rtable,テーブルA,テーブルB where テーブルA.グループコード = テーブルB.グループコード and テーブルB.店名コード = rtable.店名コード rtable.評価結果 = '○' and rtable.登録日 between '2000-01-01' and '2009-01-01' and テーブルA.グループコード ='AAAA' =============== 結果 =============== ■理想の結果(店名コードと評価結果が同じ場合は合計しない) グループコード 評価結果(合計) ---------------------------- AAAA 5 ■現在の結果(店名コードと評価結果が同じ場合も合計してしまう) グループ 評価結果(合計) ---------------------------- AAAA 7 何卒よろしくお願いいたします。
- 締切済み
- PostgreSQL
- SQL文 合計値を出力する
ID 項目CD 評価結果 ------------------------- A 1-1-1 ○ A 1-1-1 ○ B 1-1-1 × C 1-1-1 ○ A 1-2-1 ○ A 1-2-1 ○ B 1-2-1 ○ C 1-2-1 〇 上記のテーブルがあります 評価結果は、○と×があり、項目CDごとに集計を行い、項目CDが同じ場合は、○がいつくあっても1とみなして計算するということをおこないたいです 理想SELECT結果 ID 合計 -------------- A 2 (1-1-1で○が2つあるが、1つとして計算) B 1 C 2 SELECT ID,SUM(評価結果) FROM TABLE GROUP BY ID でIDと合計までは出せました 現在のSELECT結果 ID 合計 -------------- A 4 (すべての○の合計を出力) B 1 C 2 項目CDが同じ場合"○"を1つとして集計するにはどうすればいいのでしょか?
- ベストアンサー
- PostgreSQL
- データの件数を集計するための SQL
データの件数を集計するための SQL について教えてください。 例えば以下のようなテーブルがあります。 ▼テーブル 名前 |交通手段|日付 -----+--------+---- Aさん|バス |5/1 Aさん|バス |5/2 Aさん|バス |5/3 Bさん|バス |5/1 Bさん|電車 |5/2 ※「日付」については、本質問に直接の関係はありません。 このテーブルにクエリを発行して、以下の結果を取得したいと考えています。 ▼取得したい結果 名前 |交通手段|回数 -----+--------+---- Aさん|バス |3 Bさん|バス |1 Bさん|電車 |1 当方がイメージしている流れは以下の通りです。 SQL は苦手でして、これをひとつにまとめることができません。 1) GROUP BY で束ねる SELECT 名前, 交通手段 FROM テーブル GROUP BY 名前, 交通手段 2) 1)の結果の1件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Aさん' AND 交通手段='バス' 3) 1)の結果の2件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Bさん' AND 交通手段='バス' 4) 1)の結果の3件目をSELECTする SELECT COUNT(*) FROM テーブル WHERE 名前='Bさん' AND 交通手段='電車' なおレンタルサーバ上 (MySQL 5.0.77) で稼働させるため、 なるべく高速な SQL を希望いたします。
- ベストアンサー
- MySQL
- SQLでの集計について
こんにちわ。以下のようなテーブルから条件に見合う合計を出したいと思いSQLを書いてみたのですが、 思った結果になりません。 テーブルA ID1 得意先Cd 営業所Cd 日付 1 001 001 2005/09/01 2 001 002 2005/09/01 3 001 001 2005/09/03 テーブルB ID2 ID1 部署 数量 金額 1 1 01 1 1000 2 1 01 1 1000 3 1 02 1 1000 4 2 01 1 1000 5 2 01 1 1000 6 3 01 1 1000 7 3 01 1 1000 8 3 02 1 1000 [抽出結果] 得意先Cd 営業所Cd 日付 部署 数量(Sum) 金額(Sum) 001 001 2005/09/01 01 2 2000 001 001 2005/09/01 02 1 1000 001 001 2005/09/03 01 2 2000 001 001 2005/09/03 02 1 1000 001 002 2005/09/01 01 2 2000 [SQL] select 得意先Cd,営業所Cd,日付,部署,SUM(数量) As '数量計',SUM(金額) As '金額計' from テーブルA AA Inner join テーブルB BB ON (AA.ID1 = BB.ID1) group by 得意先Cd,営業所Cd,日付,部署,数量,金額 order by 得意先Cd,営業所Cd,日付,部署 このSQLを実行すると、日付、部署共に同じ場合でも数量・金額が合計値となりません。 得意先Cd 営業所Cd 日付 部署 数量 金額 001 001 2005/09/01 01 1 1000 001 001 2005/09/01 01 1 1000 どのように変更を加えれば、上記の「抽出結果」にできるのでしょうか? よろしくお願いいたします。
- ベストアンサー
- SQL Server
- 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文 合計と、特定の値を取り出す
テーブル名:料金表 ID 項目CD 金額 ------------------------- 1 101 1000 1 102 2000 1 103 100 2 101 1000 2 102 2000 2 103 50 3 101 1000 3 102 2000 上記のテーブルがあります IDと、金額の合計と、項目CDが103のものだけ金額をだしたいのです 理想SELECT結果 ID 合計 項目CD:103 ------------------------- 1 3100 100 2 3050 50 3 3000 0(もしくはnull) select ID,sum(金額) as 合計 from 料金表 where ID in(1,2,3) group by ID,金額 でIDと合計までは出せました 特定の項目の値を取り出すのはどうしたらいいでしょうか?
- ベストアンサー
- SQL Server
- 売り上げ集計SQLが作れません
1つのTABLEに、1日の売上げ高を商品ごとに登録していくDBがあります。 簡単な構造は以下のとおりです。 日付 |A品売上額 |B品売上額 | 2008/11/01 |500000 |600000 | 2008/11/02 |450000 |800000 | 2008/11/03 |100000 |700000 | ・・・ 2008/11/30 |200000 |500000 | 2008/12/01 |300000 |100000 | <質問> それぞれの商品の1ヶ月売上高をSQLで抽出したいと思うのですが、Group byで何を指定したらいけるのかわからず困っています。 SQLで計算せずに抽出だけ行って、CGI側で計算するしかないのでしょうか? アドバイスお願いいたします。 <最初に考えたSQL(Group byがないためエラーになりました)> select sum(a),sum(b) from uriage where date between '2008/11/01' AND '2008/11/30';
- 締切済み
- PostgreSQL
- SQL HAVING句の使い方について
以下のテーブルAとテーブルBを結合して結果テーブルを出力したいと考えています。 (テーブルA上のIDのカウントした数をテーブルBに結合して出力したい。) テーブルA ----------- CATE ID aaa 001 bbb 001 ccc 003 ddd 004 テーブルB ----------- ID NAME 001 101 002 102 003 103 004 104 結果テーブル ---------------------- ID NAME COUNT 001 101 2 002 102 0 003 103 1 004 104 1 そこで、 =================================== SELECT B.ID, B.NAME, COUNT(A.ID) FROM TABLE_A B, TABLE_B B GROUP BY B.ID, B.NAME, A.ID HAVING A.ID = B.ID =================================== とSQLを書いてみましたが、 002 102 0 のテーブルAにIDが存在していない列が結果として表示されませんでした。 WHERE句でいう「WHERE A.ID =* B.ID」のようなことを行いたいのですが、どのように行えばよいでしょうか? よろしくお願いいたします。
- ベストアンサー
- Oracle
- 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文作成のお願い
前提として下記のようなテーブルがあります。 テーブル名: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を書けばよろしいでしょうか?
- ベストアンサー
- PostgreSQL
補足
申し訳ございません。ご指摘通りでした。 正しくは、以下のSQLです。 select グループ,count(評価結果) from (select ID,項目CD,評価結果、登録日 from テーブルB group by ID,項目CD,評価結果,登録日 order by ID,項目CD,評価結果,登録日) as rtable where rtable.評価結果 = '○' rtable.登録日 between '2000-01-01' and '2009-01-01' 申し訳ございません!! 教えてもらう物の立場として、きちんと正しく説明できなければ、失礼ですね。気をつけます。