2012-05-11 65 views
0

我使用Cartesian產品連接2個表,如下所示。Oracle SQL Developer - 結合笛卡爾積,計數/總和和按

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個表格的相關示例。 (單獨做他們都行,只要讓他們一起工作就是問題)。

對於最終結果,我想顯示3列顯示4種類型的組合,每個類型下的條目數量以及每種類型的總數/ SUM,例如。

類型 - 類型的計數 - 總價值

A - 5 - 500

乙 - 6 - 1000

Ç - 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子句一起使用。您需要明確使用ORDER BY,因爲GROUP BY並不總是排序。 –

0

記住,查詢的結果是邏輯上等同於一個表或視圖 - 全部都是零個或多個行與一個或多個列的投影。

一般來說,你可以對選擇的表進行一些操作,你也可以對查詢或視圖進行操作。儘管有一些限制,您也可以像對待表一樣對視圖和查詢應用刪除和更新。

如有疑問,創建一個返回您想要的數據的查詢,然後把它當作一個表:

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