2014-05-25 50 views
0

我使用下面的查詢理清我的表中的數據,並沒有正確地計算:不同的值

SELECT rowid, customer, category, SUM(DISTINCT return) as returntotal, SUM(DISTINCT release) as releasetotal FROM orders GROUP BY customer 

這裏是我當前的表:

enter image description here

,這就是我需要的查詢結果是:

enter image description here

我需要通過DISTINCT'category'返回DISTINCT值的SUM;由DISTINCT'category'和所有GROUPED BY客戶在'release'中的DISTINCT值的總和。我當前的查詢正在跳過具有相同值的DISTINCT類別。例如:在頂部圖像中的rowid 17-19中,我的查詢爲Scott生成了一個值爲'465'的值,其中我需要的值是每個DISTINCT類別的DISTINCT值或465的Home Goods和Lawn的465。

我的每一行輸出應該如下:

customer (no duplicates)  totalreturn  totalrelease 

下面是各行所需的輸出的一個例子:

Scott  $0  $930 
Michelle $123 $250 
Brad  $2070 $0 

問題:

  1. 什麼都要我的發言看起來像是要產生我需要的結果?
  2. 正在使用GROUPED BY矯枉過正如果我已經使用DISTINCT ??

謝謝!

+0

考慮提供適當的DDL(和/或sqlfiddle)與期望的結果集 – Strawberry

回答

0

爲了讓您的最終結果,使用子查詢:

select customer, sum(return) as return, sum(category) as category 
from (select distinct customer, return, release, category 
     from orders 
    ) o 
group by customer; 

現在,我已經說的是,我認爲你必須與你的基礎數據存在問題。無論何時您可能會考慮sum(distinct)count(distinct),您都有數據問題。在這種情況下,我假設數據在orders表中按照類別有意不規範化。你應該從不同的表格中獲得每個類別的共同價值。或者,您在orders中有重複,不應該在那裏。

+0

感謝您的意見,戈登。我想我會重新檢查我的導入(我的數據來自一個.csv文件),看看我是否可以正常化INSERT上的分組。 – DataGuy