
はじめまして、現在Postgres8.3を利用して開発を行っています。
以下のテーブルがあります。
No グループ
-------------------------------------
1 AAAA
2 BBBB
3 CCCC
■テーブルB
ID 項目CD 評価結果 グループ 登録日
-------------------------------------
A 1-1-1 ○ AAAA 2000-10-10
A 1-1-1 ○ AAAA 2007-12-10
B 1-1-1 × AAAA 2006-12-16
C 1-1-1 ○ AAAA 2009-04-16
A 1-2-1 ○ AAAA 2004-10-16
A 1-2-1 ○ AAAA 2007-01-16
B 1-2-1 ○ AAAA 2003-12-14
C 1-2-1 〇 AAAA 2007-12-15
評価結果は、○と×があり、項目CDごとに集計を行い、項目CDが同じ場合は、○がいつくあっても1とみなして計算するということをおこないたいです。
登録日を指定して、抽出したいのですが、
登録日を 条件に含めると、全部計算されてしまいます。
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'
■理想の結果
グループ 合計
--------------
AAAA 5
■現在の結果
グループ 合計
--------------
AAAA 7
どうしても出来なくって、困っています。
よろしくお願いいたします!!
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
#1です。
あらかじめBの排除すべきデータを排除して、改めてBと繋げるというのはどうでしょ。実行してないんで間違ってるかもしれませんがこんな感じで。
select A.グループコード,Count(B.評価結果)
from
(select 項目ID,店コード,Max(登録日) from B
where 登録日 Between '2000-01-01' and '2009-01-01'
group by 項目ID、店コード) as rtable
join B on B.項目ID = rtable.項目ID
and B.店コード = rtable.店コード
and B.登録日 = rtable.登録日
join C on B.店コード = C.店コード
join A on C.グループコード = A.グループコード
where B.評価結果 = '○' and A.グループコード = 'AAAA'
No.3
- 回答日時:
#2です
SELECT SUM(CNT)
FROM
(SELECT COUNT(distinct 評価結果) AS CNT FROM テーブルB
WHERE 登録日 between '2000-01-01' and '2009-01-01'
AND 評価結果 = '○'
GROUP BY ID,項目CD,グループ) AS R
でした。
この回答への補足
すみません。ご指摘いただいたのに、こちらの質問の仕方が悪く、
期待した結果が表示されませんでした。かなり割愛していたため、
再度、質問させてください。
========================
行いたいこと
========================
テーブルは3つあります。(すみません正しくは3つです。)
テーブルAは統括会社のテーブル、Bは店情報、Cはお店の評価結果です。
行いたいのは、統括会社ごとに、統括会社傘下のお店の評価結果の合計を表示することです。
その際、期間を指定して合計値を表示するといったことを行いたいです。
ただ、評価結果の合計を算出する際に、お店ごとに過去に”○”がついた評価項目は、重複しない
形で計算をしたいです。
例)
項目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 ID,項目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
No.2
- 回答日時:
SELECT COUNT(distinct 評価結果) FROM テーブルB
WHERE 登録日 between '2000-01-01' and '2009-01-01'
AND 評価結果 = '○'
GROUP BY ID,項目CD,グループ
でいいのでは。
ただし、
> C 1-1-1 ○ AAAA 2009-04-16
のデータが登録日の条件に適合しないから結果は「4」になりますが。
No.1
- 回答日時:
そのSQL、ほんとに実行結果が出るんですか?
rtableのSelectに「登録日」が無い時点で
rtable.登録日 between ~
でエラーになると思うんですが。「グループ」もSelectに無いですね。
質問に書いてあるSQLでは理想の結果どころか現在の結果も出ない気がするんですが・・・
この回答への補足
申し訳ございません。ご指摘通りでした。
正しくは、以下の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'
申し訳ございません!!
教えてもらう物の立場として、きちんと正しく説明できなければ、失礼ですね。気をつけます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLにて指定日付より前、かつ最...
-
javaでデータベース上のテーブ...
-
SELECT 文の NULL列は?
-
レコードを1件のみ取得した後...
-
テーブルに存在しない列をselec...
-
Postgresqlのレポート機能について
-
重複を許すキーの構文がわかり...
-
PostgreSQLの断片化の状況を確...
-
SQLでUPSERTを一度に複数行やる...
-
単純なselectが遅くなるのです...
-
「テーブルに座って……」という...
-
Accessでデータシートに同じデ...
-
accessでレコード更新直後の反...
-
Oracleのsystem表領域について
-
飲み会で、座敷orテーブルどち...
-
一つ前に戻るには…
-
SQLです教えてくださいお願いし...
-
SQLあってますか?こう?
-
sqlplusで表示が変なので、出力...
-
SQLで漢字名称を都道府県や市区...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
SQLにて指定日付より前、かつ最...
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
単純なselectが遅くなるのです...
-
javaでデータベース上のテーブ...
-
PostgreSQLの断片化の状況を確...
-
テーブルにcsvファイルをインポ...
-
2つのテーブルで引き算 postgres
-
MS Access から PostgreSQL へ...
-
テーブル定義書作成時のIndex付...
-
デットロック回避策(autocommit...
-
PostgreSQL レコードからアイテ...
-
複数テーブルにまたがるmax
-
Postgresのデータ領域の拡張に...
-
テーブルを作ろうとしたら。
-
COPYコマンドによるTEXT取り込...
-
postgreSQL カラムの全ての値を...
-
ワークテーブル(ローカル)か...
-
reindex と update のデッドロック
おすすめ情報