2012-05-11 12 views
0

デカルト積を使用して2つのテーブルを次のように結合しています。デリゲート・デリバリー - デカルト積、総和/集計By

select p.type, i.amount 
FROM products p, invoice i 
where (p.account = i.id); -- column headers cant be changed despite having same info 

もちろん、それぞれの値とともに2つの列が表示されます。

しかし、私はさらにCOUNT/GROUP BYとSUM/GROUP BYを使ってデータを操作したいのですが、2つのテーブルを使って作業するための関連するサンプルを見つけることができませんでした。 (それらをすべて別々にやることは大丈夫です、一緒に働くことが問題になります)。

最終的には、4つのタイプのグループ化を示す3つの列を表示し、それぞれのタイプに該当するエントリの数と各タイプの合計/ SUMを表示したいとします。

タイプ - タイプのカウント - 合計値

A - 5から500

B - 6から1000

C - 1から50

D - 2から100

+0

どのようなクエリを試しましたか?何が悪かったのか? – Rene

+0

あなたの質問はもうデカルト製品ではありません。すでに内部結合操作です –

答えて

1

これを試しましたか?心の中で

select p.type, count(p.type) Cnt, sum(i.amoumt) Total 
FROM products p, invoice i 
where (p.account = i.id) 
group by p.type 
+0

これは完全に動作します。私は非常に似たようなことを試してみましたが、解決にどれくらい近づいているのか分かりませんでした...ありがとうございました –

+0

結果がp.typeで注文されるようにするには、偶発的な注文に頼るだけでは十分ではありませんGROUP BY句を使用します。 GROUP BYは常にソートされるわけではないので、明示的にORDER BYを使用する必要があります。 –

0

ベアクエリの結果は、表またはビューと論理的に等価であること - それらのすべては、1つ以上の列を持つゼロまたはそれ以上の列の投影されています。

一般的に、選択の面でテーブルに対して行うことは、クエリまたはビューに対して行うことができます。いくつかの制限があるにもかかわらず、テーブルの場合と同様に、ビューとクエリに削除と更新を適用することができます。

疑問がある場合は、必要なデータを返すクエリを作成し、それを表として扱う:また

select type, 
     count(type) count_type, 
     sum(amount) sum(amount) 
from  (select ...) 
group by type 

注意あなたが参照する必要がある場合は、特定のappplicationsを持つサブクエリファクタリング句、複数の同じ論理データセット:

with my_data as(
    select ...) 
select type, 
     count(type) count_type, 
     sum(amount) sum(amount) 
from  my_data 
where type in (select ... from my_data) 
group by type