2016-03-16 80 views
-1

我需要在一列中計算不同日期,但我不想按此組合。在Oracle SQL Developer中計數distinct不起作用

數據源表:

ID zip5 date  volume 
11 11111 01/03/16 5 
12 11111 01/03/16 6 
13 11111 01/04/16 7 

我的代碼:

Select zip5, count(ID), count(distinct (date)), sum(volume), 
from table 
group by zip5 

所需的輸出:

zip5 count(ID) count(distinct (date)) sum(volume) 
11111   2      1   11 
11111   1      1   7 

不過,我得到的是:

zip5 count(ID) count(distinct (date)) sum(volume) 
11111   3      3   18 
+3

你已經標記了這三個競爭的數據庫產品。你使用所有三個? –

+0

如果你通過zip5進行分組,你不能指望有什麼不同,預期的結果(與你輸入的內容一樣)是行11111 3 3 18. – Paolof76

+0

你也爲PL/SQL Developer標記了它,但是標題中的SQL Developer。不是客戶在這裏重要,但如果您清楚您實際使用的是哪個客戶端和數據庫,這將有所幫助。 –

回答

0

爲了簡化您的輸出,請在GROUP BY表達式中添加「DATE」列。

Select zip5, count(ID), count(distinct ("DATE")), sum(volume) 
from "TABLE" 
group by zip5,"DATE" 
order by 1,2; 

     ZIP5 COUNT(ID) COUNT(DISTINCT("DATE")) SUM(VOLUME) 
---------- ---------- ----------------------- ----------- 
    11111   1      1   7 
    11111   2      1   11 

您可以對不在選擇列表中的列進行分組(即,選擇不同的行)。

1

最有可能的是,您面臨的問題是您的date列有一個時間分量 - 而且,唉,當您從表中選擇時,它不會顯示。

您可以截斷日期以刪除時間組件。所以試試這個:

Select zip5, count(ID), count(distinct trunc(date)), sum(volume), 
from table 
group by zip5; 
+0

Linoff。非常感謝你!。有用。爲什麼日期數據格式很重要?你的意思是分鐘/秒不顯示在數據中? –

+0

@MichaelLi。 。 。正確。默認情況下,Oracle不會顯示「日期」列的時間組件。 –