仮に以下2つのテーブルがあったとします。
(両方とも、JOINなどで結合されたテーブルです)
tableA
|id|nedan|jitubai|
|01|1000|900|
|02|1500|1000|
|03|2300|2000|
tableB
|id|nedan|jitubai|
|01|1500|1300|
|02|1500|1200|
|03|2300|2200|
この2つをUNIONALLで結合すると以下のようになると思うのですが、
|id|nedan|jitubai|
|01|1000|900|
|02|1500|1000|
|03|2300|2000|
|01|1500|1300|
|02|1500|1200|
|03|2300|2200|
これを何とかして、idを軸にnedanカラム、jitubaiカラムの値を足して出したいのです。以下の感じです。
|id|nedan|jitubai|
|01|2500|2200|
|02|3000|2300|
|03|4600|4200|
どうすれば良いのでしょうか……。
何か良い知恵をお借りできれば、と思っています。
宜しくお願い致します。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
PostgreSQLは、別名を、その別名を付けた階層のクエリのorder byでは使用できないようですね。
別名を付けるクエリをインラインビューにしてしまえば、その側のクエリでその別名を使用できるようです。
select *
from (
select x.id,sum(x.nedan) as nedan,sum(x.jitubai) as jitubai
from (select * from tableA union all select * from tableB) as x
group by x.id
) as y
order by jitubai IS NULL, jitubai DESC, id
;
No.4
- 回答日時:
連続投稿になりますが。
。。以下のようなSQLで、期待した結果になりませんか?
select x.id,sum(x.nedan) as nedan,sum(x.jitubai) as jitubai
from (select * from tableA union all select * from tableB) as x
group by x.id
order by x.id
>select x.id,sum(x.nedan) as nedan,sum(x.jitubai) as jitubai
>from (select * from tableA union all select * from tableB) as x
>group by x.id
>order by x.id
はい、こちらでOKでした。すいません....orz
実はnedanとjitubaiで、時々jitubaiに値が入っていないケースがあります。つまりnedanはメーカ希望価格、jitubaiは小売店販売時値段のようなものでして、jitubaiは小売店が商品を売れなかった場合には値が入らないケースがあります。ですので、
>order by x.id
はOKですが、たとえば
>order by jitubai IS NULL, jitubai DESC, id
とかですと、jitubaiって何よ? とSQL側に怒られます。
ちなみに現在のpostgreSQLはpostgresql-8.3beta3を利用しています。最新ですね。。。。
もう少し練ってみます。
レスありがとうございます!!
No.3
- 回答日時:
#2の回答は、私の方が解釈を間違ったようです。
>ただ、ふと思ったのですが上記の場合ですとORDER BYしたケースでは値が分かれるのではないか? と思ったのですが、やはりORDER BYすると
~となってしまうようです。
どこに、どういうorder byの指定を入れたのですか?
PostgreSQLのバージョンは、何でしょうか?
No.2
- 回答日時:
ん???
>tableBが相当ややこしくて、5つぐらいのテーブルが外部結合とOUTERJOINで成り立っています。
外部結合=OUTER JOINですよ?
「LEFT OUTER JOIN」と「RIGHT OUTER JOIN」がありますけど。
「select ~ from t1,t2 where t1.c1=t2.c1」または「select ~ from t1 inner join t2 on t1.c1=t2.c1」は、内部結合と言います。
>上記の場合ですとORDER BYしたケースでは値が分かれるのではないか? と思ったのです
「order by」は、検索結果の返却(表示)順の並べ替えを行う指定ですから、複数行を1行にまとめるという機能ではありません。
例えば、sum関数やcount関数は、group byがなければ、表のデータ全体を1個の集合として扱い、結果は1行になります。
「group by」とsum関数やcount関数を組み合わせることで、特定のグループ毎に合計や件数を求められます。
>うーん……PostgreSQLってなかなか難しい
この辺の話は、標準的なSQLの基本的な操作です。
(^_-)-☆
>chukenkenkouさん
レスポンスありがとうございます。
ちょっと仕事がドタバタしていまして、レスが遅れました。
申し訳ありません。
> 外部結合=OUTER JOINですよ?
> 「LEFT OUTER JOIN」と「RIGHT OUTER JOIN」がありますけど。
内部結合と書いたつもりが外部結合になってしまってますね(汗
疲れてる……orz
>例えば、sum関数やcount関数は、group byがなければ、表のデータ全体を1個の集合として扱い、結果は1行になります。
>「group by」とsum関数やcount関数を組み合わせることで、特定のグループ毎に合計や件数を求められます。
このあたりの結果については、後ほど上記のレスにて回答いたします!
No.1
- 回答日時:
>仮に以下2つのテーブルがあったとします。
>(両方とも、JOINなどで結合されたテーブルです)
>この2つをUNIONALLで結合
この2段階のクエリでどういう操作を行っているかで適用できない場合もあるかも知れませんが、group by句とsum関数でいいのでは?
select x.id,sum(x.nedan) as nedan,sum(x.jitubai) as jitubai
from (union allのクエリ) as x
group by x.id
>chukenkenkou様
レスポンスありがとうございます。
>この2段階のクエリでどういう操作を行っているかで適用できない場合もあるかも知れませんが、group by句とsum関数でいいのでは?
こちらですが、tableAはtableα、外部結合tableΘで構成されています。
tableBが相当ややこしくて、5つぐらいのテーブルが外部結合とOUTERJOINで成り立っています。
>select x.id,sum(x.nedan) as nedan,sum(x.jitubai) as jitubai
>from (union allのクエリ) as x
>group by x.id
こちら上記で出来ました!
感動です。ありがとうございます。
ただ、ふと思ったのですが上記の場合ですとORDER BYしたケースでは値が分かれるのではないか? と思ったのですが、やはりORDER BYすると
|id|nedan|jitubai|
|03|2300|2200|
|03|2300|2000|
|01|1500|1300|
|02|1500|1200|
|02|1500|1000|
|01|1000|900|
となってしまうようです。
うーん……PostgreSQLってなかなか難しいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルに存在しない列をselec...
-
SQLにて指定日付より前、かつ最...
-
SELECT 文の NULL列は?
-
VIEWのCOPYってできないんですか?
-
PostgreSQLの断片化の状況を確...
-
javaでデータベース上のテーブ...
-
SQLでUPSERTを一度に複数行やる...
-
postgres FILLFACTOR 確認方法
-
VARCHAR型の数値比較
-
oracleからposgreへの移行時の...
-
postgreSQL カラムの全ての値を...
-
最新レコードを抽出し外部結合...
-
PHPとMySQLを使った掲示板の作り方
-
Accessでデータシートに同じデ...
-
SQLです!!教えてください。
-
SQliteの日付検索について
-
SQL、2つのテーブルで条件一致...
-
ACCESSで3ファイルを結合して、...
-
SQL 複数テーブルのupdate
-
C#で電卓のプログラムを組んで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
SQLにて指定日付より前、かつ最...
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
単純なselectが遅くなるのです...
-
PostgreSQLの断片化の状況を確...
-
javaでデータベース上のテーブ...
-
2つのテーブルで引き算 postgres
-
PostgreSQL レコードからアイテ...
-
Postgresのデータ領域の拡張に...
-
Postgresqlのレポート機能について
-
VIEWのCOPYってできないんですか?
-
POSTGRESQL 検索スピードが遅い
-
Pythonで2つのデータ(キー無し...
-
備品管理のデータベースについて
-
最新レコードを抽出し外部結合...
-
重複を許すキーの構文がわかり...
-
データのマッチングです。お願...
-
テーブルにcsvファイルをインポ...
-
postgreSQL カラムの全ての値を...
おすすめ情報